2016-12-29 8 views
0
main() 
{ 
char name[20]; 

printf("enter your name\n"); 

scanf("%s",name);  
printf("%s",name); 

gets(name); 
puts(name); 
} 

入力:ここSampadサハputsとgets関数はどのように機能しますか?

出力

Sampadサハ

gets()から取られた入力を使用します。

私はこのprintf()を省略した場合、出力は

だろう、とサハ

だからここプットはscanf()を通じて与えられた何も印刷されません。

main() 
{ 
char color[20]; 

printf("enter your name\n"); 

scanf("%s",color); 
puts(color); 
} 

しかし、ここputs()scanf()から取られた入力を使用しています。

ここ
+6

あなたの質問がありますか? – ForceBru

答えて

4

問題は、

ABC XYZ

コード

scanf("%s",name); 

などの入力のためのみ "ABC" 部分と "XYZ" を読み出します入力バッファに残されます。後でgets()を読むと、puts()がそれを表示します。あなたはprintf()newlineを持っていないため、出力はをフラッシュされていないとputs()の結果は、出力ストリームバッファにを追加され、プログラムの実行が終了すると、全体の出力バッファが完全に印刷フラッシュされます全体を一緒に入力してください。あなたがprintf()をドロップすると

そうは、他の場合には、scanf()「ABC」)で読み取り値が印刷されていません。

%sscanf()とすると、空白で区切られた入力を読み取ることができません。最初の空白で読み込みを停止します。

引用符C11。章§7.21.6.2

s        は非空白文字の列にマッチします。 [...]

%sについては、scanf()が最初の空白に遭遇したら読み込みを停止します。入力scanf()は(改行を終了点で最大)全体入力を読み取り、したがって、両方(すなわち、空白で区切られた入力が与えられていない)、空白を含まない第二の場合、に来る

printf()puts()は同じものを出力します。

つまり、DO NOT use gets(), it is dangerousとなります。代わりにfgets()を使用してください。

+0

私は間違っているかどうかわかりません。しかし、同じ変数がその場合に使用されているだけなので、Sahaを印刷している印刷の場合(2番目の例)はありませんか?そして、最初は 'gets()'から読み込んで失われる前に出力バッファに格納されます。 – coderredoc

+0

@coderredoc 'pf/sf'と' gets/puts'のペアが使う限り同じ変数、それは同じになります。 _の間の変数は変更できますが、結果は変更されません。 :) –

+0

ok ..thanks。私はそれを正しく得た。 – coderredoc

関連する問題