簡體   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