数据类型检查导致 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 {
...
}
我正在检查来自 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 {
...
}