私はプログラミングを (再) 学習しており、C から始めました。私の IDE (そう言えば) は cygwin (32Bit) と Visual-Studio 2010 で、どちらも Windows7 で動作します。私は常に、VS2010 コンパイラだけでなく、gcc (cygwin) で記述したコードをコンパイルしています。そうするのは、それが良い学習方法だと思うからです。とにかく、fflush(stdin)、つまり stdin バッファのフラッシュについて学びました。そうでなければ、scanfを使用するのは面倒に見えるので、良い機能のようです。そこで、教科書の例に基づいて以下のコードを書きました。cygwin の gcc と VS2010 の両方でコンパイルできます。VS コンパイル済みプログラムを実行すると正常に動作します (s.below)。gcc コンパイル済みプログラムを cygwin で実行すると、fflush(stdin) は stdin バッファーをフラッシュしません (s.below)。場合によっては fflush(stdin) の動作が未定義であるというスレッドをいくつか読みました。それが何を意味するにせよ、C for Linux Programming の教科書から引用しました。fflush(stdin) が stdin バッファー内のものを取り除く有効な手段ではない場合、他にどのような標準的な方法がありますか?
回答ありがとうございます。
== Windows で実行されるプログラム:
enter a long integer and a double
23.00 78.99
lint = 23
dt = 0.00
enter a five digits input
78493
u entered 78 and 493
== Cygwin で実行されるプログラム:
enter a long integer and a double
23.00 78.99
lint = 23
dt = 0.00
enter a five digits input
u entered 78 and 2665720
==コード====
long lint;
double dt;
int fp, sp;
char fn[50], ln[50];
/* using the l modifier to enter long integers and doubles */
puts ("enter a long integer and a double");
scanf("%ld %lf", &lint, &dt);
printf("lint = %d\ndt = %.2f\n", lint, dt);
fflush(stdin); /*DOES NOT WORK UNDER CYGWIN!?*/
/* use field width to split input */
puts("\nenter a five digits input");
scanf("%2d %3d", &fp, &sp);
printf("u entered %d and %d\n", fp, sp);