2

文字列に含まれる文字と単語の数をカウントする非常に単純なCプログラムを作成しました(テキストとそれに1つのスペースが含まれるかどうかを確認して単語をカウントします)。現在のコードは次のとおりです(短くするための「printf」はありません)。

int main(int argc, char *argv[])
{
    int character;
    int words, characters = 0;
    while ((character = getchar()) != '\n') {
        characters = ++characters;
        if ((character == ' ') || (character == '\d')) {
            words = ++words;
        } 
    } 
    return 0;
}

私の問題は、単語の数え方がうまくいかないことです。私は文字の正確な数を取得しますが、単語は常に私に2293576を与えます、そして私は世界のためにその理由を理解することができません。

誰かが私のためにこの謎を解くことができますか?

すべての回答ありがとうございます。私は本当に助けに感謝します。

私の原始的なスキルがあなたの頭の一部を傷つけたなら申し訳ありません。私は初心者ですが、うまくいけば速く改善します。

4

3 に答える 3

6

を初期化していませんwords。Cの初期化されていないローカル変数は、デフォルトで未定義の値になり、自動的にゼロに初期化されません。

ステートメント

int x, y = 0;

と同じではありません

int x = 0, y = 0;
于 2012-11-01T17:54:03.237 に答える
3

単語を0に初期化しません。また、これを変更します。

characters = ++characters;

ただ:

characters++;

(そしてwordsまた)。

また、'\d'キャラクターは何ですか(プレーンな古いd以外)?

于 2012-11-01T17:55:02.940 に答える
2

「単語」の初期化に失敗しました。声明の中で:

int words, characters = 0;

charactersは0に割り当てられますが、words初期化されないままなので、任意の整数値を含めることができます。その後、コードの残りの部分はwords、初期化されていない状態で変更されます。0から始めてカウントアップする代わりに、words2293576のようなものから始めて、そこからカウントアップします。コードを修正するには、forループで使用する前wordsと同様に0に割り当てます。characters

int words = 0, characters = 0;
于 2012-11-01T17:57:21.433 に答える