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

标签 c types io

我正在检查 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/

相关文章:

c - mmap > 1GB 失败,错误号 12

c - scanf 异常与 %c 和 %s 相关行为

c - 逗号运算符 , 的作用是什么?

scala - 修复 self 类型中的抽象类型

assembly - 如何验证或检查I/O(输入/输出,io,IO)端口?

python - 执行非 block 写入时出现问题

编译带有依赖项的 .c 文件

java - 将 tinyint 映射为 boolean hibernate

java - 在 Java 中确定 'type'

c - 如何改进我的代码以从文本表填充数组?