输入字符时C中的无限循环

时间:2014-03-26 09:33:15

标签: c

我正在为刽子手写一个客观的c程序。我需要复制另一个给我的程序。我已经完成了大部分工作,但我遇到了问题。它必须完全复制另一个程序,所以我进入另一个程序并在字长中输入一个字符。它提出了"数字必须在3到14之间(含)和#34;声明,并要求我再次输入一个数字,但它开始无限循环。当我输入一个低于3且大于14的数字(出现错误并要求另一个输入)时,它会工作但是带有一个无限循环的字母。此外,循环意味着无限循环,直到字长大于3且小于14.这就是为什么while循环将无限循环任何想法???感谢

while (i == 0) {
    printf("\n\n > Please enter a word length: ");
    scanf("%i", &wordLength);
    printf("\n\n");

    if (wordLength > 3 && wordLength < 14) {
        continue;
    }
    else printf("number must be between 3 and 14 (inclusive)");
}

5 个答案:

答案 0 :(得分:2)

这里的主要问题(您似乎在询问)是您不会检查scanf来电中的错误。它将返回成功扫描的项目数,如果没有扫描,则返回零,或者出现错误EOF

如果scanf无法从输入中提取数据,例如当您要求整数但用户写了一个字母时,那么该字母将继续在输入缓冲区中,因此下一次调用{{ 1}}会再次看到那封信。一次又一次......

解决此问题的最佳方法是将整行作为文本读入缓冲区,然后尝试解析此缓冲区中的整数(使用例如scanf):

sscanf

答案 1 :(得分:1)

问题在于while (i == 0){您永远不会在循环中更改i。您可能希望将其更新为

 while (wordLength == 0){

但请确保在循环之前执行wordLength=0

答案 2 :(得分:1)

更改循环的i的值以终止。你在内部循环中的任何地方改变i的值。

continue;

不会退出循环,只会跳过continue语句后的语句并再次启动循环。要退出循环,请使用

break;

因此请使用break或将i的值更改为i=0以外的某个值以退出循环。

答案 3 :(得分:1)

我认为您的意思是break而不是continue

if (wordLength > 3 && wordLength < 14)
    break;

break会把你带出循环,而continue会跳到循环的下一次迭代(正如其他人提到的那样,永远不会终止,因为i永远不会改变)

答案 4 :(得分:0)

当条件满足时,不要忘记打破循环。

while ( 1 ){

    printf("\n\n > Please enter a word length: ");
    scanf("%i", &wordLength);
    printf("\n\n");
    if (wordLength > 3 && wordLength < 14) {
        break;
    } 
    else printf("number must be between 3 and 14 (inclusive)");
}