繁体   English   中英

C printf在扫描下一个号码之前不会打印

[英]C printf wont print before scaning next number

我得到了这段代码

#include<stdio.h>
#include <stdlib.h>

int main()
{
  int i;
  int number, S;
  float MO;


  S = 0;

  for(i=0;i<10;i++)
  {
    printf("AAA %d\n", i );
    scanf("%d\n", &number);
    S = S + number;
  }

  MO = S/10;

  printf("%d , %f \n",S , MO );
  return 0;
}

当执行开始时,AAA 0被打印。然后我给出我的第一个号码。之后,我期待看到AAA 1,但是只有在我给出第二个号码后才能打印。 在这里查看

在scanf()问题之前的C / C ++ printf()

但似乎我可以得到这些解决方案都不适合我

声称这与刷新输入或输出有关的答案是错误的。 问题与此无关。 scanf()模板字符串末尾的\\n字符的出现指示scanf()匹配并丢弃空白字符。 它将执行此操作,直到遇到非空白字符或达到文件结尾。 C11标准的相关部分是§7.21.6.25:

由白色空格字符组成的指令通过读取第一个非空白字符(仍然未读取)的输入来执行,或者直到不再能够读取字符为止。 该指令永远不会失败。

在OP的情况下,必须在输入流中放置第二个数字,以便可以分配第一个数字。 然后第二个数字保留在输入流中,直到下一次调用scanf() 在Stephan Lechner给出的示例的情况下,从文件中获取输入,在每个要分配的数字之后输入流中有一个数字,直到最后一个数字(如果恰好有十个数字),然后是EOF原因scanf()返回。 请注意,OP也可以在每次输入后从键盘发出EOF信号。 或者,OP可以在一行中输入所有数字,并使用额外的数字来表示输入结束:

1 2 3 4 5 6 7 8 9 10 11

解决方案只是从scanf()模板字符串的末尾删除\\n 这种模板字符串末尾的空格字符很棘手,而且几乎不是实际所需的字符。

只需从scanf格式字符串中删除\\n

scanf("%d", &number);

"\\n"等待非白色空间。 而是使用scanf("%d", &number) @Michael Walz并检查其返回值。

让我们分解scanf("%d\\n", &number);

  1. "%d"扫描数字文本。 该说明符将允许前导空白区域。 找到一些非数字字符后,将该字符放回stdin 如果找到整数的有效数字文本,则转换为int并保存到number

  2. "\\n"扫描并丢弃0个或更多的空格,例如'\\n'' '等。 继续扫描直到遇到非空白区域,将该字符放回stdin

现在返回扫描的字段数(1)。


注意步骤2.用户必须在Return'\\n'之后输入数据才能返回 scanf()

问题在于stdout的缓冲,除非输出中有\\n或者特定地调用fflush否则不会强制刷新

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM