【发布时间】:2013-04-14 22:04:11
【问题描述】:
以下代码打印相同的结果 - 两次 (!)(使用 Microsoft Visual C++ 2010 IDE)。我还打印了每个变量的最终值以查看发生了什么,实际上有两组值满足if 语句条件。
我的问题是,既然指令是 break;,如果条件评估为 TRUE,任何人都可以解释一下我是如何/为什么在我没有要求的情况下获得这两个结果的(不是说这是一件坏事,只是试图理解) ?这是if 构造的一部分还是与循环有关?如果条件不止一次评估为 TRUE,似乎某些东西知道返回多个解决方案,我只是不明白当指令没有明确说明这样做时它是如何做到这一点的(除非有内置的东西-我不知道)。
基本上,一旦条件得到满足,为什么循环不会在break; 结束,或者我想错了?
再一次,如果有人知道或者我在这里遗漏了一些基本的东西,请告诉我!我是 C++ 新手,所以只是想学习一下,在此先感谢您。
代码如下:
#include "stdafx.h"
#include <iostream>
int main()
{
for (int a = 1; a < 500; ++a)
{
for (int b = 1; b < 500; ++b)
{
for (int c = 1; c < 500; ++c)
{
if ((a + b + c) == 1000 && ((a*a + b*b) == (c*c)))
{
cout << "The product abc = " << a*b*c << endl << "a = " << a << ", b = " << b << ", c = " << c << endl;
break;
}
}
}
}
cout << endl << "Loop terminated";
char d;
cin >> d;
return 0;
}
控制台输出如下:
产品 abc = 31875000
a = 200,b = 375,c = 425
产品 abc = 31875000
a = 375,b = 200,c = 425
循环终止
【问题讨论】:
-
break只跳出最里面的 for 循环。 -
谢谢,是的,我很笨...
-
虽然我的官方回答很垃圾,很快就被删除了,看看这个answer我提交了一个类似的问题。这是完全不同的,但总体结果是在类似情况下消除了重复。还要注意使用布尔值来控制循环。
-
break是错误的解决方案。a和b在您求解的方程中完全可以互换。除非您将b从上方或下方限制为a,否则您将获得重复的解决方案。尝试将第二个循环设置为for (int b = a; b < 500; ++b)并且a和b互换的重复项将消失。
标签: c++ if-statement conditional-statements