2016-06-20 7 views
0

documentation on scanfは、フォーマット中の "空白以外の文字"があれば、関数がストリームから次の文字を読み込み、空白以外の文字と比較し、一致した場合には破棄され、関数はformatの次の文字。 文字が一致しない場合、関数は失敗し、ストリームの後続の文字を戻して残します。scanfが空白以外の文字を含むドキュメントに続くのはなぜですか?

しかし、私が実行した場合:

1 2 

それは出力します:以下の入力と

int x; 
while(scanf("\n%d",&x)==1) printf("%d\n",x); 

1 
2 

与えられたの前に何のは '\ n' がありませんことを2つの数字のうち、なぜscanfはそれらを読みますか?それはドキュメントとは違いますか?

+5

改行は空白とみなされ、scanfによって無視されます。 –

+1

scanfが空白文字をどのように扱うかについての部分を読みましたか? – user2357112

+0

ありがとうございました。空白文字のセクションには、だけでなく、新しい行を含む「空白文字の文字」が含まれています。問題を解決済みにするにはどうすればよいですか? –

答えて

5

を参照してください:

  • 空白文字:関数は、前に発生した空白文字を読み、無視します次の非空白文字(空白文字にはスペース、改行文字、タブ文字が含まれます - isspace参照) 形式の単一空白文字文字列は、ストリーム(noneを含む)から抽出された任意の量の空白文字を検証します。

\nは空白文字です。

したがって、コール

scanf("\n%d",&x) 

&xにデータを読み出す前にstdioから空白文字の任意の数を抽出し、廃棄します。

2

\nは空白文字です。あなたがにリンクし、ちょうどあなたが引用された段落の前に、私が見る同じページでisspace()

関連する問題