1

stdin から入力された文字をカウントするプログラムを C で作成しました。ループを使用して複数のエントリを許可したかったのです。(注:私はプログラミングが初めてです。)

main()
{
    long nc;
    int c;
    int kc=1;
    for (kc=1;kc<=5;kc=kc+1)
    {
        nc=0;
        c= getchar();
        while(c != '0')
        {

        ++nc;
        c=getchar();
        }

        printf("%1d\n",nc);

    }
    return 0;
}

基本的に、ご想像のとおり、ループは 5 つのエントリを受け入れます。

問題:Sky0最初の結果を入力すると、3 で問題ありません。しかし、それ以降、カウントに 1 が追加されます。つまり、結果を入力dame0すると、結果がカウントされ5sit0結果がカウントされます4

さまざまな段階で prinf を使用して問題をデバッグしようとしているときに、最初の結果の後にコードが入力の終わりを見つけた後、コードは決して for ループに入り、 as0で次のエントリを待機することに気付きました。これにより、対応する出力でエラーが発生します。nc1

どこが間違っているのか教えてください。そして、センシング後もループに入るのはなぜ0ですか?

あなたの助けと時間を大いに感謝します:)

4

1 に答える 1

2

問題は、Enter キーを押すと、それも文字 (値 0x1a) になりgetchar、while ループの外側の呼び出しによって返されることです。

次のようなことができます:

while (getchar() != '\n') nc++;

そうすれば、文字列の終わりを示すために 0 を使用する必要さえありません。

于 2012-05-24T15:47:24.647 に答える