1

このコードが正しく機能しない理由がわかりません:

#include<stdio.h>

    int main()
{
    char string [100];
    int a;
    printf(">");
    scanf("%d", &a);
    printf(">");
    gets(string);
    printf("%s\n", string);
}

これは私が作成しなければならなかったプログラムの一部であり、scanf() 関数で値を取得した後、プログラムがスキップしたり、gets() 関数で文字列を適切に読み取らない理由を理解できません。コードをコンパイラにコピーして実行しようとすると、私の言いたいことが理解できます。

4

2 に答える 2

3

指定子は%d改行 (またはその他の空白) を食べません。これを試して:

scanf("%d ", &a);
         ^

そのスペースはscanf、非空白になるまですべての空白を捨てます。ちなみに、あなたの質問はこのC FAQと非常によく似ています。


  • を使用しないでくださいgets。もう言語に含まれていないほど悪いです。fgets代わりに使用
  • fflush(stdin)あなたの問題を提案する人を信用しないでください
于 2012-05-30T16:19:41.707 に答える
0

(scanf の後) スペースで構成された文を読む必要があるときはいつでも、scanf を次のように変更します。

scanf(" [^\n]", mystring);
       ^ Space here.

あなたの例を見てください:

#include<stdio.h>

int main(void)
{
    char mystring[100];
    int a;

    printf(">");
    scanf("%d", &a);

    printf(">");
    scanf(" %[^\n]", mystring);

    printf("Number:%d\nString: %s\n", a, mystring);

    return 0;
}
于 2015-01-02T21:45:08.730 に答える