このばかげた質問で申し訳ありません。ユーザーに年齢と名前を入力してから、年齢と名前を画面に出力するように求めるCプログラムがあります。これは本から読んだ私のエクササイズです。
これはプログラムです:
#include <stdio.h>
int main (void) {
int age;
char name[20];
puts("Enter your age:");
scanf("%d",&age);
fflush(stdin);
puts("Enter your name:");
scanf("%s",name);
printf("Your age is %d\n",age);
printf("Your name is %s\n",name);
return 0;
}
最初に余分な文字を入力するscanf()
と、プログラムが終了し、余分な文字が次の文字に割り当てられますscanf()
次に、コードを変更し、名前付きの関数を追加し、その関数内でclear_buff()
使用して、ストリームの残りの文字を読み取ります。コードは期待どおりに機能します。fgets
clear_buff()
#include <stdio.h>
#define MAXLEN 80
void clear_buff(void);
int main (void) {
int age;
char name[20];
puts("Enter your age:");
scanf("%d",&age);
clear_buff();
puts("Enter your name:");
scanf("%s",name);
printf("Your age is %d\n",age);
printf("Your name is %s\n",name);
return 0;
}
void clear_buff(void){
char junk[20];
fgets(junk,MAXLEN,stdin);
}
私の質問は、なぜfflush(stdin)
このプログラムで働かないのですか?
この本には、fflush
関数がストリーム上のバッファリングされたデータをクリアすると書かれています.I
fflush()
/ Oストリームを操作する場合、関数はC標準関数であることを知っています。