以下のCコードがあります。
#include<stdio.h>
int main()
{
//Declaring structure book.
struct book
{
char name;
float price;
int pages;
};
struct book b[5];
int i;
//Below loop takes the info if 5 books from user
for (i=0; i<5; i++)
{
printf("Enter name, price, and pages: ");
fflush( stdin );
scanf("%c%f%d",&b[i].name,&b[i].price,&b[i].pages);
}
return 0;
}
しかし、コンパイルして実行すると、奇妙なことが起こります。
-bash-4.1$ ./a.out
Enter name, price, and pages: A 23 34
Enter name, price, and pages: B 34 54
Enter name, price, and pages: Enter name, price, and pages: C 56 78
Enter name, price, and pages: -bash-4.1$
i = 2 の場合、scanf() はキーボードを待機しないことがわかります。次に、i = 3 のとき、scanf() はキーボード入力を待ちます。再び i=4 では、scanf() はキーボード入力を待ちません。
使ったことはあると思います
fflush(stdin);
正しい場所に。次の scanf() で return キーをバッファーに入れたくありません。
デバッグするために、私は fflush(stdin) を使用しないようにして、何が発生するかを確認しました。しかし、fflush(stdin) がなくても、プログラムを実行すると同じことが起こります。したがって、fflush(stdin) がこの問題を引き起こしているわけではないと思います。
私のプログラムがどこで間違っているのか、誰か指摘してください。
ありがとう。