【发布时间】:2014-11-13 22:03:26
【问题描述】:
我在 C 中尝试一些简单的东西,一个程序来获取交换并进行一些转换。 为了确保 scanf 获得正确的类型,我将它放入一个 while 循环中,它会继续要求输入,直到插入一个数字。 如果我输入一个字符而不是一个数字,它不会再次要求输入。
exRate = 0;
scanfRes = 0;
while(exRate <= 0){
printf("Enter the exchange rate:");
while(scanfRes != 1){
scanfRes = scanf(" %f", &exRate);
}
if(scanfRes == 1 && exRate > 0){
break;
}
printf("Exchange rate must be positive.\n");
}
更新:由于这是一项课程作业,我不应该使用教学材料之外的任何东西。当我向学术人员询问如何处理意外输入时,我得到的答案是我不应该考虑这种情况。
cmets 中的答案和帮助都很有用,我在所有有用的建议中加了 1。工作人员的回答使这个问题不再需要。
【问题讨论】:
-
多想想你的循环逻辑。
scanf如果读取成功则返回1;或0如果您输入了非数字,或EOF如果输入已关闭。最里面的while循环没有任何意义 -
当
scanf()发现无效输入时,它会推回并提前返回。您必须使用不是数字的字符,否则scanf将始终因相同的错误输入而失败。 -
@AlexD:我想到了,但这是一个 C 课程作业,他们提供文件中的输入。如果我清除缓冲区,它将刷新我从输入文件中获得的所有输入。
-
@Dean 你检查了这个答案吗:stackoverflow.com/a/1716066/3246555?