我正在尝试一些简单的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");
}
更新:由于这是课程作业,我不应该使用教材之外的任何内容。当我向学术人员询问处理意外输入时,我得到了一个答案,这是我不应该考虑的情况。
评论中的答案和帮助都很有用,我在所有有用的建议中加了1。工作人员的回答使得不再需要这个问题。
答案 0 :(得分:1)
更改scanf()
结果的处理。
如果输入不符合预期,则需要读取有问题的输入数据或应处理EOF
。
for (;;) {
printf("Enter the exchange rate:");
scanfRes = scanf("%f", &exRate);
if (scanfRes == 0) {
printf("Exchange rate must be numeric.\n");
// somehow deal with non-numeric input, here just 1 char read & tossed
// or maybe read until end-of-line
fgetc(stdin);
} else if (scanfRes == EOF) {
// Handle EOF somehow
return;
} exRate > 0){
break;
}
printf("Exchange rate must be positive.\n");
}
注意:不需要" "
中的" %f"
。 "%f"
将消耗领先的空白区域。