fflush(stdin)について。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
とし

fflush(stdin)について。

#1

投稿記事 by とし » 11年前

コード:

 
#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が機能したのでしょうか。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: fflush(stdin)について。

#2

投稿記事 by みけCAT » 11年前

とし さんが書きました:①、fflush(stdin)について調べていましたが、バッファに格納されているデータを吐き出すとかいてありました。
この意味がよく理解できません。もう少しわかりやすく教えていただけないでしょうか。
fflush(stdin)の効果は未定義です。詳しくは他の人に聞いてください。
とし さんが書きました:②、fflush(stdin)をコメントにした場合、なぜ2回めと4回めscanfが機能しなかったのでしょうか。そしてなぜ3回めのscanfが機能したのでしょうか。
全てのscanfは機能しています。
2回めと4回めのscanfはその前に読み込んだ文字(2回目なら'a')の直後に入力された改行文字を読み込んでいます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

とし

Re: fflush(stdin)について。

#3

投稿記事 by とし » 11年前

>全てのscanfは機能しています。
>2回めと4回めのscanfはその前に読み込んだ文字(2回目なら'a')の直後に入力された改行文字を読み込んでいます。

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

閉鎖

“C言語何でも質問掲示板” へ戻る