0

これがコードで、非常に単純ですが、なぜfgets最初のループの後にプロンプ​​トが表示されないのでしょうか? そして年齢です。(そして奇妙なことに、それは動作しscanf("%s",&name_temp)ますが、私は áéíóúÇ、スペースなどの他の文字も取得する必要があるので、の方が良いでしょうfgets)

 int menu_option = 0;
 char name_temp[80] = "";
 int age_temp = 0;

 while(menu_option != 9){

     //strcpy(name_temp,"");

     printf("Type your name\n");
     fgets(name_temp, 80, stdin);

     printf("\nType your age\n");
     scanf("%d", &age_temp);

 }

(削除された回答から移動)

皆さん、ご回答ありがとうございます。しかし、皆さんが私の質問を理解していないと思います。私が送信したこのコードをテストしてください。ターミナルに入力するものを表示する代わりに、最初のコードの後は無視されることがわかります。 while ループ。

私が望んでいたのは、最初のループ (while) の後で戻ってきて、プログラムを使用している人物の名前を再度尋ね、プログラムを使用している人はもう一度入力する必要があるということです。しかし、その代わりに、ループの最初の時間の後、何も入力するように求められず、fgets は完全に無視されます。

コードを試して、何ができるか教えてください。

freopen を試してみましたが、うまくいきませんでした。

4

3 に答える 3

3

実行すると、ループのたびに「あなたの名前を入力してください」と実際に出力されましたが、scanf の呼び出しが入力ストリームに残した '\n' を取得していたため、入力を待ちませんでした。これはよくある問題です。1 つの解決策は、getchar(); を挿入することです。ループの一番下で、その改行を食べます。

于 2011-03-20T15:42:10.023 に答える
2

fgetsつまり、文字に到達stdinするまで読み取ります。\n

scanf\n文字を に残しましたstdin

次に、fgets空行を読み取ります。

于 2011-03-20T11:17:08.610 に答える
-1

stdinバイナリ モードで開く必要があります。これを行うために使用freopen(NULL, "rb", stdin)します。

詳細については、 C read binary stdinを参照してください。

于 2011-03-20T11:18:27.637 に答える