gpt4 book ai didi

c - 数据类型检查导致 C 中永无止境的循环

转载 作者:行者123 更新时间:2023-12-04 09:38:36 26 4
gpt4 key购买 nike

我正在检查 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 {
...
}

Demo.

关于c - 数据类型检查导致 C 中永无止境的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com