ページ 11

fflush(stdin)について。

Posted: 2014年6月07日(土) 19:40
by とし

コード:

 
#include<stdio.h>
int main(){
	
	char a;
	printf("①文字を入力:");
	scanf("%c",&a);
	printf("①入力された文字は:%c\n",a);
	
	//fflush(stdin);
	
	printf("②文字を入力:");
	scanf("%c",&a);
	printf("②入力された文字は:%c\n",a);
	
	//fflush(stdin);
	
	printf("③文字を入力:");
	scanf("%c",&a);
	printf("③入力された文字は:%c\n",a);
	
	//fflush(stdin);
	
	printf("④文字を入力:");
	scanf("%c",&a);
	printf("④入力された文字は:%c\n",a);
	
	
	return 0;
}
こちらを実行すると実行結果は以下のようになりました。

①文字を入力:a
①入力された文字は:a
②文字を入力:②入力された文字は:

③文字を入力:b
③入力された文字は:b
④文字を入力:④入力された文字は:

となります。
ですが、//を外し、fflush(stdin)を機能させると

①文字を入力:a
①入力された文字は:a
②文字を入力:b
②入力された文字は:b
③文字を入力:c
③入力された文字は:c
④文字を入力:d
④入力された文字は:d

となりました。
①、fflush(stdin)について調べていましたが、バッファに格納されているデータを吐き出すとかいてありました。
この意味がよく理解できません。もう少しわかりやすく教えていただけないでしょうか。

②、fflush(stdin)をコメントにした場合、なぜ2回めと4回めscanfが機能しなかったのでしょうか。そしてなぜ3回めのscanfが機能したのでしょうか。

Re: fflush(stdin)について。

Posted: 2014年6月07日(土) 19:45
by みけCAT
とし さんが書きました:①、fflush(stdin)について調べていましたが、バッファに格納されているデータを吐き出すとかいてありました。
この意味がよく理解できません。もう少しわかりやすく教えていただけないでしょうか。
fflush(stdin)の効果は未定義です。詳しくは他の人に聞いてください。
とし さんが書きました:②、fflush(stdin)をコメントにした場合、なぜ2回めと4回めscanfが機能しなかったのでしょうか。そしてなぜ3回めのscanfが機能したのでしょうか。
全てのscanfは機能しています。
2回めと4回めのscanfはその前に読み込んだ文字(2回目なら'a')の直後に入力された改行文字を読み込んでいます。

Re: fflush(stdin)について。

Posted: 2014年6月07日(土) 20:06
by とし
>全てのscanfは機能しています。
>2回めと4回めのscanfはその前に読み込んだ文字(2回目なら'a')の直後に入力された改行文字を読み込んでいます。

なるほど!入力された文字はa\nであるため、aを読み込み、aを出力、次に\nを読み込んだので改行を出力したということで謎の改行があったわけなのですね!
ありがとうございます