C 使用函数查找字母和单词

C 使用函数查找字母和单词,c,C,我正试图得到字母数/单词数的答案。。。我在数词方面有问题 实际上,在这里我只声明一个新词是,如果有一个空格,制表符,一个换行符,但仍然不起作用 这是我的职责: int num_of_letters_words() { int numberOfLetters = 0; int numberOfWords = 0; int userInput; int answer; printf("please enter your input:\n"); whil

我正试图得到字母数/单词数的答案。。。我在数词方面有问题

实际上,在这里我只声明一个新词是,如果有一个空格,制表符,一个换行符,但仍然不起作用

这是我的职责:

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。。。这里怎么了

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提供了很好的调试工具。你可以一步一步地浏览你的代码,观察你的变量是如何变化的,并通过这种方式真正理解你的代码

还有一个建议:把一些东西放在桌子上(瓶子、花等),想象是你的教授或老板,试着向他详细解释你的代码是如何工作的。你会意识到你自己不知道你的代码的某些部分实际上做了什么/发生了什么,这将迫使你寻找答案(谷歌、书籍等等)


祝您好运:)

继续
使您的循环继续进行下一次迭代,它会跳过随后的循环

假设“单词”将被定义为一系列字母,后跟分隔符(空格、制表符等),那么您的循环可能如下所示:

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提供了很好的调试工具。你可以一步一步地浏览你的代码,观察你的变量是如何变化的,并通过这种方式真正理解你的代码

还有一个建议:把一些东西放在桌子上(瓶子、花等),想象是你的教授或老板,试着向他详细解释你的代码是如何工作的。你会意识到你自己不知道你的代码的某些部分实际上做了什么/发生了什么,这将迫使你寻找答案(谷歌、书籍等等)


祝你好运:)

@Nir:不客气。我们都不知怎么开始了:)快速提问-为什么您编写的if块没有将控制字符作为单词计数并将其添加到单词计数?从它看起来是什么样子“如果你看到其中一种情况,增加字数,然后检查缓冲区中的下一个字符……当然我检查了它和它的工作,所以如果我运行程序,只分配空格或换行符,它会返回0,但从看起来的情况来看,它会增加它们。你能解释一下我错过了什么吗?:)@我不想数一数。但是如果你能向我解释为什么这一行是“如果(c是“| |”\t“| |”\n“| |”、“| |”.”等){wordCount++;continue;}“正确地计算单词……我不明白,因为它看起来像是每一个换行或制表符(等等)它会将wordCount减少1…如果我运行它并仅单击新行和选项卡,例如,并询问wordCount值,它将为零…这就是我想要做的!但我想知道为什么…谢谢@LihO@Nir当前位置我只是想给你一些提示,指引你正确的方向,我想你会自己完成的。但是,因为你似乎有点被它卡住了,我编辑了我的答案。很酷,谢谢:)我所做的是if(isspace(userInput)){numberOfWords++;}else{numberOfLetters++;}@LihO@Nir:不客气。我们都不知怎么开始了:)快速提问-为什么您编写的if块没有将控制字符作为单词计数并将其添加到单词计数?从它看起来是什么样子“如果你看到其中一种情况,增加字数,然后检查缓冲区中的下一个字符……当然我检查了它和它的工作,所以如果我运行程序,只分配空格或换行符,它会返回0,但从看起来的情况来看,它会增加它们。你能解释一下我错过了什么吗?:)@我不想数一数。但是如果你能向我解释为什么这一行是“如果(c是“| |”\t“| |”\n“| |”、“| |”.”等){wordCount++;continue;}“正确地计算单词……我不明白,因为它看起来像是每一个换行或制表符(等等)它会将wordCount减少1…如果我运行它并仅单击新行和选项卡,例如,并询问wordCount值,它将为零…这就是我想要做的!但我想知道为什么…谢谢@LihO@Nir当前位置我只是想给你一些提示,指引你正确的方向,我想你会自己完成的。但是因为你似乎有点被它卡住了,我编辑了我的答案。酷谢谢:)我所做的是if(isspace(userInput)){numberOfWords++;}else{numberOfLetters++;}@LihO