3

私は K&R の第 2 版に取り組んでいますが、この一見単純な例に困惑しています。

#include <stdio.h>

main(){
    double c;
    for(c = 0; ((getchar() != EOF) && (getchar() != '\n')); ++c)
        ;
    printf("%.0f\n",c);
}

それは単に正しく機能していません。Enterキーを押したときにプログラムを終了する部分を追加しましたが、それもあまり(getchar() != '\n')役に立ちません。

gccMac OSX 10.6 開発ツールに付属の を使用したサンプル出力を次に示します。

pool-000:Desktop user$ ./a.out 
a
0
pool-000:Desktop user$ ./a.out 
asdf

2
pool-000:Desktop user$ ./a.out 
asfasf

3

したがって、何かが明らかに間違っています。18ページです、参考になれば。これは宿題ではありません。これは楽しみです。

ありがとう :)

4

2 に答える 2

5

への各呼び出しgetchar()は、文字が読み取られるのを待つため、ループの反復ごとに思った以上に読み取っています。

また、少なくとも私の意見では、カウンターは (ほとんど) ではありません。doubleプレーンな old などの整数型を使用する必要がありますint

于 2009-11-01T21:45:39.043 に答える
3

2 つの "getchar()" 操作を実行する際の問題は、条件付きテストで 2 つの get chars を読み取ることです... ++c に到達する前に。

「EOF」比較を捨てると、期待どおりに機能するはずです。

于 2009-11-01T21:56:04.127 に答える