[英]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.