0

文字数/単語数の答えを出そうとしています... 文字数の数え方に問題があります。

実際、ここでは、スペース、タブ、改行がある場合にのみ新しい単語であると宣言しますが、それでも機能しません..

これは私の機能です:

int num_of_letters_words()
{
    int numberOfLetters = 0;
    int numberOfWords = 0;
    int userInput;
    int answer;
    printf("please enter your input:\n");
    while ((userInput = getchar()) != EOF)
    {
        if (ispunct(userInput))
            continue;

        else if(userInput == '\n')
            continue;

        else if (userInput == ' ')
            continue;

        else if (iscntrl(userInput))
            continue;

        else if (userInput == ' ')
            ;
        else
           numberOfLetters++;

        if (userInput == ' ' || userInput == '\n' || userInput == '\t')
            numberOfWords++;
    }
    answer = numberOfLetters/numberOfWords;
    return answer;
}

関数の最後にのみ、counter という単語が表示されます。何が問題なのですか?

4

1 に答える 1

3

continueループを次の反復に継続させ、その後に続くものをスキップします。

「単語」が一連の文字とそれに続く区切り文字 (スペース、タブなど) として定義されるとしましょう。ループは次のようになります。

while ((c = getchar()) != EOF)
{
    if (c == ' ' || c == '\t' || c == '\n' || etc.)
    {
        if (letterCountThisWord > 0)
            wordCount++;
        letterCountThisWord = 0;
        continue;
    }
    letterCount++;
    letterCountThisWord++;
}

if (letterCountThisWord > 0)
    wordCount++;

アプリケーションで何が起こっているのかよくわからない場合は、便利なデバッグ ツールを提供する優れた IDE がたくさんあります。コードを段階的に見ていき、変数がどのように変化するかを見て、そのようにコードを真に理解することができます。

もう 1 つのアドバイス: テーブルに何か (ボトル、花など) を置き、それが教授または上司であると想像して、コードがどのように機能するかを詳細に説明してみてください。コードのいくつかの部分が実際に何をしているのか、何が起こっているのかについて自分自身が何も知らないことに気付くでしょう。

幸運を :)

于 2013-02-02T02:54:21.553 に答える