[英]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);
"%d"
扫描数字文本。 该说明符将允许前导空白区域。 找到一些非数字字符后,将该字符放回stdin
。 如果找到整数的有效数字文本,则转换为int
并保存到number
。
"\\n"
扫描并丢弃0个或更多的空格,例如'\\n'
, ' '
等。 继续扫描直到遇到非空白区域,将该字符放回stdin
。
现在返回扫描的字段数(1)。
注意步骤2.用户必须在Return或'\\n'
之后输入数据才能返回 scanf()
。
问题在于stdout
的缓冲,除非输出中有\\n
或者特定地调用fflush
否则不会强制刷新
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.