【问题标题】:Flush Input Buffer C刷新输入缓冲器 C
【发布时间】:2014-01-28 06:05:45
【问题描述】:

注意:fflush(stdin) 不起作用。

问题:
我正在使用 scanf (inb4 depreciated) 在 while 循环中输入数字。当我输入一个时,缓冲区会用空行填充其余部分。

代码:

double input, total;

for(i=0; i<COUNT; i++){
     printf("\nNumber %d: ", i+1);
     scanf("%d", &input);
     total += input;
}
printf("\nAverage: %f\n", total/COUNT);

输出:

Please enter 5 decimal numbers: 
Number 1: 1.0

Number 2: 
Number 3: 
Number 4: 
Number 5: 
Average: 0.000000

【问题讨论】:

  • 为什么在scanf中使用%d取浮点值?使用%f
  • 从 2 到 5 输入“0”时发生了什么?
  • 我没有看到 ist 还是缺少来自 COUNT 的声明?
  • 像往常一样,您忘记在 scanf 格式中添加“\n”(它应该是“%f”而不是“%d”)。尝试使用“%f\n”,您应该会看到更好的结果。
  • scanf 需要在出现换行时被告知。 "\n" 允许跳过行尾并准备读取下一个值。有关详细信息,请参阅任何手册页,或在此处搜索 SO。这个问题已经被回答了大约一百万次。

标签: c math buffer flush cstdio


【解决方案1】:
 if(scanf("%d", &input) != 1)
 {
      /* If scanf failed to read a number clear the input buffer */
      while((c = getchar()) != '\n' && c != EOF);
 }

【讨论】:

    【解决方案2】:

    在接受输入之前使用 flushall() 您还使用 %d 存储在 double 中,使用 %lf,或将输入声明为 int

    【讨论】:

    • flushall 是非标准的。
    猜你喜欢
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2021-11-19
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多