C++ 直到循环重复两次,break语句才起作用

C++ 直到循环重复两次,break语句才起作用,c++,C++,只是碰到这个问题,不知道该怎么解释。问题是标题。首先,for循环的语法很奇怪,也不清楚 for (inputNum != 0; counter < 9; counter++) { //if (inputNum == 0)break; scanf("%f\n", &inputNum); if(inputNum == 0){break;} inputArray[counter] = inputNum; // if (inputNum == 0) {break;} //break; }

只是碰到这个问题,不知道该怎么解释。问题是标题。

首先,for循环的语法很奇怪,也不清楚

for (inputNum != 0; counter < 9; counter++)
{
//if (inputNum == 0)break;
scanf("%f\n", &inputNum);
if(inputNum == 0){break;}
inputArray[counter] = inputNum;
// if (inputNum == 0) {break;}
//break;
}
这没有任何逻辑意义,并且会使代码失败。如果这真的是你想做的话!inputNum=0将更正语法。否则就不行了


还有你的if声明,哦,天哪。你必须缩进。这毫无意义。请努力学习代码,不要只是问我的代码不工作,请修复它

您的for语句构造不正确。for语句的第一部分不会执行在执行for语句之前调用的任何测试,但不会再次执行


看起来您希望在inputNum不为0时读取,而计数器代码似乎只在第二个循环上工作的原因是由于您的scanf函数

for(/* no initialization here*/; inputNum != 0 && counter < 9; counter++) {
    scanf("%f\n", &inputNum);
    //  if(inputNum == 0){break;},
    //  ^~~~ not needed because scanf and the condition
    // inputNum != 0 will quit the loop.
}
如果您将其正确更改为:

scanf("%f\n", &inputNum);
您会注意到您的代码执行正确。 这是因为在输入第二个数字之前,scanf一直处于阻塞状态

这是因为格式字符串末尾的\n正在消耗输入流中的所有后续\n字符和其他空白字符

输入任何非空白字符,然后再次按enter键将允许scanf终止,因为它将不再被使用

引用我的话:

isspace函数指定的空白字符,如空格和换行字符。空白字符导致fscanf、scanf和sscanf函数读取但不存储输入中的所有连续空白字符,直到下一个非空白字符。格式中的一个空白字符与输入中空白字符的任意组合匹配


对于inputNum!=0; ... 毫无意义。这是一个相当时髦的说法。人们对这篇文章太苛刻了。虽然代码相当混乱,但是如果你修复程序并运行它,你会看到OP发布的问题与他混乱的for循环无关。事实上,原因是相当微妙的。@Serdalis这个问题可能是真实和合法的,但目前的问题仍然可能被认为是不清楚或没有用处的,即使答案是令人感兴趣的。
scanf("%f\n", &inputNum);
scanf("%f", &inputNum);