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

Data type check results in a never ending loop in C

我正在检查来自 scanf 的 return 值以查看用户输入的类型是否正确,当代码正确时它可以工作,但是当我输入一个 char 或其他非双精度的东西时程序无限循环。我只是在做一个基本检查,我知道这不会捕获用户输入“23w4”的情况,它只会解析 24,我只想捕获用户输入 "zero" 或其他一些情况非双入方案。下面是一段代码:

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 returns 为零时,读取缓冲区中的数据没有任何进展。无论输入什么都保持缓冲,因此 scanf 的下一次调用可以读取它。

要解决此问题,请将数据读取添加到新行,并丢弃输入的任何内容,如下所示:

if(errorCheck == 0) {
    printf("Invalid input, please try again\n");
    scanf("%*[^\n]%*c");
} else {
    ...
}

Demo.