0

単語を数える関数、文字を数える関数、文字と単語の平均を出力する関数の 3 つの関数を作成しようとしています。printing_average()最後の関数( )printfで理解できないxcodeでエラーが発生しました...

あなたの助けに感謝。

私のコード:

...main()
int num_of_words()

{
    int userInput;
    int numOfWords = 0;

    while ((userInput = (getchar())) != EOF)

    {
        while (userInput != ' ')
        {
            if (userInput == ' ')
                numOfWords++;
        }
    }

    return numOfWords;
}

int num_of_letters()

{
    int userInput;
    int numberOfLetters = 0;

     while ((userInput = (getchar())) != EOF)
    {
        if (ispunct(userInput) && numberOfLetters > 0)
        {
            numberOfLetters--;
        }

        else if(userInput == 'n' && numberOfLetters > 0)
        {
            numberOfLetters--;
        }

        else if (userInput == ' ' && numberOfLetters > 0)
        {
            numberOfLetters--;
        }

        else if (isdigit(userInput))
            printf("please enter only characters:\n");
            continue;
    }

    return numberOfLetters;
}

int printing_average()

{
    printf("please enter couple of words:\n");

    return printf("the average of number of letters and number of words is: %d", num_of_letters()/num_of_words());

}
4

2 に答える 2

2

私はあなたのプログラムをコンパイルしようとしませんでしたが、このロジックは機能しないと思います:

while (userInput != ' ')
{
    if (userInput == ' ')
        numOfWords++;
}

このように、numOfWords はインクリメントされないため、最後の印刷ではゼロで除算されます...

于 2013-02-01T17:33:40.743 に答える
1

実際の質問に答えるには: はい、printf 呼び出しの一部として任意の数の関数を呼び出すことができます。

文字と単語の両方で同じ単語セットを実際に数えたい場合、ロジックは機能しません。「getchar()」が呼び出されるたびに、入力バッファから何かが取り出されます。したがって、最初の呼び出しでは、EOF が表示されるまで入力の一部が読み取られます。その時点で、2 番目の関数が呼び出され、すぐに EOF が表示されるため、カウントする文字/単語はありません。

これを解決するには、コードを次のいずれかに再配置する必要があります。2. 1 つの関数で両方の数を計算する新しい関数を作成します。

私はオプション2を好みます。これはより簡単な解決策であり、入力が非常に大きい場合でも問題は発生しません。確かに時間がかかりますが、すべてを保存してから 2 回カウントする必要はありません。

于 2013-02-01T17:43:06.973 に答える