我正在检查 scanf 的返回值以查看用户输入的类型是否正确,并且它在代码正确时工作,但是当我输入 char 或 double 以外的其他内容时,程序无限循环。我只是在做一个基本检查,我知道这不会捕获用户输入“23w4”的情况,它只会解析 24,我只想捕获用户输入“零”或其他一些非双入程序。下面是一段代码:
double getDeposit() {
int noError = 0;
double Deposit = 0;
while(noError == 0) {
int errorCheck = scanf("%lf", &yearlyDeposit);
if(errorCheck == 0) {
printf("Invalid input, please try again");
} else {
noError = 1;
}
}
return yearlyDeposit;
}
最佳答案
这是一个很常见的问题:当 scanf
返回零时,它在读取缓冲区中的数据时没有任何进展。无论输入什么都保留在缓冲中,因此下一次调用 scanf
可以读取它。
要解决此问题,请将数据读取添加到新行,并丢弃输入的任何内容,如下所示:
if(errorCheck == 0) {
printf("Invalid input, please try again\n");
scanf("%*[^\n]%*c");
} else {
...
}
关于c - 数据类型检查导致 C 中永无止境的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350000/