【发布时间】:2016-06-05 16:26:41
【问题描述】:
此代码的目的是,如果用户输入格式不正确的输入,程序同时要求用户重试。出于某种原因,虽然在我的代码中,第一次迭代后不断跳过 scanf,导致无限循环
#include <stdio.h>
int main() {
double A1;
int n1, loopchck, i=0;
while (i==0) {
printf("Enter a real number and inerger (A n): ");
fflush(stdin);
loopchck=scanf_s(" %lf %d", &A1, &n1);
if (loopchck == 2) {
i = 1;
}
else {
i = 0;
}
}
return 0;
}
【问题讨论】:
-
fflush(stdin);是 UB,删除它。 -
在失败的情况下,你需要清理标准输入......
-
您调用的不是标准函数
scanf,而是scanf_s,它必须是自定义函数。该问题可能与该函数的作用有关。 -
还相关:您知道标准输出通常在终端上进行行缓冲,对吧?所以很有可能你的 printf 实际上不会导致任何东西出现在屏幕上。你可能想
fflush(stdout)。 -
scanf()在第一次迭代后不断被跳过,因为错误的输入仍然存在。如果输入对scanf()不利,为什么您认为再次调用相同的代码会返回不同的结果。?您需要额外的代码来使用有问题的输入。
标签: c while-loop scanf