“scanf()”失败后如何获取新输入?

问题描述 投票:0回答:1

我正在设计一个函数

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()
的调用将继续尝试扫描相同的无效输入 一遍又一遍(无限循环!)

c scanf
1个回答
1
投票

当处理未知输入时,通常最好将输入读入缓冲区并尝试从中解析或提取数据。

在你的情况下,看起来像这样可能是有意义的:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.