mon*_*o76 3 c++ if-statement conditional-statements
以下代码打印相同的结果 - 两次(!)(使用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;
}
Run Code Online (Sandbox Code Playgroud)
控制台输出如下:
产品abc = 31875000
a = 200,b = 375,c = 425
产品abc = 31875000
a = 375,b = 200,c = 425
循环终止
你break唯一突破内循环,所以外循环继续执行.
一种可能性是将该代码移动到单独的函数中,并在第一次找到匹配时从函数返回.然后(除非你再次调用该函数)该代码的执行将完全停止.
我也c完全消除了循环.唯一有意义的值c是1000 - (a+b),所以你也可以直接计算它,而不是循环遍历500个不同的值来找到它.