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。此时,第二个函数被调用,它立即看到 EOF,因此不会有任何字母/单词要计算。

要解决这个问题,您需要将代码重新排列为: 1. 将所有输入收集到一个数组中,然后使用这两个函数来确定每种事物的数量。2. 编写一个新函数,在一个函数中计算两个事物的数量。

我更喜欢选项二。这是一个更简单的解决方案,如果输入非常大,也不会导致问题 - 当然,这需要一些时间,但您不需要存储所有内容然后计算两次!

于 2013-02-01T17:43:06.973 回答