1

私はプログラミングを (再) 学習しており、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);
4

4 に答える 4

0

私が理解していることから、あなたはこのプログラムを Linux 用に書いており、信じられないかもしれませんが、fflush(stdin)Windows でしか動作しません。(少なくとも、C for dummies と呼ばれる C の本から得たものです)。fflush(stdin)Linux での代替は ですfpurge(stdin)。試してみて、それがうまくいくかどうかを確認してください。

于 2017-06-25T21:26:19.393 に答える