1

fflush(stdin) を使用して stdin ストリームの残りを次のようにフラッシュするという間違いを犯しました。

printf("Gimme number");
scanf("%d",&number);
fflush(stdin);
printf("Gimme string");
gets(string);

もちろん、ヘッダー ファイルと残りのファイルを含めました。ここで古い投稿を検索しましたが、scanf("%c\n",c); に関する提案しか見ませんでした。. これにより、scanf("%d\n",x); を実行すると、プログラムがクラッシュします。アイデアはありますか?

4

2 に答える 2

3

scanf1つの可能性は、次のようなものを使用して、ビアによって残された改行を消費することですgetchar()

printf("Gimme number");
scanf("%d",&number);
getchar();
printf("Gimme string");
gets(string);

もう1つの可能性は、scanfを使用することです。

printf("Gimme number");
scanf("%d",&number);
printf("Gimme string");
scanf(" %99s", string);

99文字列バッファの長さに置き換える場合は、の前のスペースに注意して、%に残っている空白(またはタブや改行)が無視されるようにしますstdin

于 2013-01-08T21:26:37.773 に答える
0

入力から全行 (ENTER を含む行) を読み取ります。行を解析します (おそらくstrtol()srttod()、または を使用sscanf())。

char buffer[1000];
int number;
printf("Gimme number: ");
fflush(stdout);
fgets(buffer, sizeof buffer, stdin); // needs error checking
number = strtol(buffer, &err, 10); // needs error checking
printf("Gimme string: ");
fflush(stdout);
fgets(buffer, sizeof buffer, stdin); // needs error checking
strcpy(string, buffer);
string[strlen(string) - 1] = 0; // remove ENTER
于 2013-01-08T21:42:49.940 に答える