我正在设计一个函数
get_num()
,它将代表最小值的整数作为参数。这
函数应该重复要求用户输入数字,直到用户输入大于或等于的整数
到给定的最小值。该函数应以整数形式返回有效条目。
该函数可能假设用户仅输入整数值。
int main(){
scanned = scanf(...);
while (scanned != 1 or the number scanned in was too small) {
// call scanf again....
scanned = scanf(...);
}
return 0;
}
但是,当
scanf()
未成功从标准输入读取输入时,该值仍保留在
标准输入。这意味着循环内对 scanf()
的调用将继续尝试扫描相同的无效输入
一遍又一遍(无限循环!)
当处理未知输入时,通常最好将输入读入缓冲区并尝试从中解析或提取数据。
在你的情况下,看起来像这样可能是有意义的:
int get_num(int min) {
char buffer[1024]; // size arbitrarly chosen
while(fgets(buffer, sizeof buffer, stdin)) {
// extract number
int value;
if (sscanf(buffer, "%d", &value) != 1 || value < min) {
// print some error message
continue;
}
return value;
}
// return some "error value"
return -1;
}