我正在为刽子手写一个客观的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)");
}
答案 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)");
}