break语句在循环重复两次之前不起作用

时间:2014-09-18 03:10:22

标签: c++

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;
}

刚遇到这个问题,不知道如何解释它。问题是标题。

3 个答案:

答案 0 :(得分:0)

首先,你的for循环的语法,好吧,它很奇怪,而且不清楚。

for ( inputNum != 0; ...

这没有任何逻辑意义,并且将使代码失败。如果这真的是你想要做的那么!(inputNum = 0)将纠正语法。否则它不起作用。

你的if声明在里面,哦,上帝。你必须坚持。这毫无意义。请努力学习代码,尽量不要问“我的代码不起作用,修复它pl0x”。

答案 1 :(得分:0)

您的“for”语句构造错误。 for语句的第一部分不执行任何测试 - 在执行for语句之前调用它,但不再执行。 Good reference here

看起来你想要在inputNum不为0时阅读,而你的计数器<9(你最多读取9个数字吗?)

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.
}

在“for”语句中看到一个空的初始化器有点奇怪,但仍然合法。事实上,对于(;;)也是合法的,但会创建一个无限循环。

答案 2 :(得分:0)

您的代码似乎仅适用于第二个循环的原因是您的scanf功能。

scanf("%f\n", &inputNum);

如果您将此更改为(正确)为:

scanf("%f", &inputNum);

您会注意到您的代码正确执行 这是因为scanf正在阻塞,直到输入第二个数字。

这是因为格式字符串末尾的\n占用了输入流中的所有后续\n(和其他空白字符)。

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

引自IBM scanf(强调我的):

  

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