【问题标题】:C Programming; Word, Character and Line Count K&R 1-11C编程;字数、字符数和行数 K&R 1-11
【发布时间】:2021-05-14 09:57:57
【问题描述】:
#include <stdio.h>
#define YES 0
#define NO 0

int main()
{
    int c, nl, nc, nw, tab;

    nl = 0;
    nc = 0;
    nw = 0;

    tab = NO;
    while ((c = getchar()) != EOF)
    {
        ++nc;
        if (c == '\n')
            ++nl;
        if (c == ' ' || c == '\t' || c == '\n')
            tab = NO;
        else if (tab == NO) 
        {
            tab = YES;
            ++nw;
        }
    }
    printf("NL: %d\nNC: %d\nNW: %d\n", nl, nc, nw);
}

大家好,这里有新的编码员。实际上,非常新,我几天前才开始希望扩大我的工作机会。无论如何,使用这个程序,它会计算每个新行、单词和字符。在大多数情况下,我明白发生了什么,但我不明白的是新词部分。例如,在我们#define YES/NO 的顶部,单词前面的数字显然无关紧要?我用 1 和 0 换了这么多其他选择,但仍然得到相同的结果,这是为什么呢?如果这是一个愚蠢的问题,请提前道歉,因为我自己是一个愚蠢的编码员。请保重,感谢您的宝贵时间!

【问题讨论】:

    标签: c word-count line-count charactercount


    【解决方案1】:

    上一点:

    在 C 中,如果条件表达式为 0,则计算结果为 false,如果为任何其他值,则为 true,因此 YES 可以是 11000-1000 等,只要因为它不是0,所以对其求值的条件表达式将始终为真。

    至于问题:

    要使代码按预期工作,YES 必须是 1,或者根据上面的解释,不是 0

    else if (tab == NO) 
    {
        tab = YES;
        ++nw;
    }
    

    如果YES0tab 将始终是0NW 将不准确,因为它将计算所有字符,除非它们是\t 或@987654339 @ 而这不是程序应该做的,NW 应该是字数。

    例如,对于这个输入:

    This is a word I wrote
    

    你将拥有:

    NL: 1
    NC: 23
    NW: 17 
    

    什么时候应该:

    NL: 1
    NC: 23
    NW: 6
    

    tab 设置为1 (YES) 作为一个标志,表明该代码段仅增加nw 1 次,以防这三个字符之一,从而计算单词之间的空格或换行符仅一次,为您提供输入文本中的字数。

    【讨论】:

    • 说得好,非常感谢。不敢相信我错过了!
    • @haiphan0445,很高兴帮助一位新程序员;)请注意,如果您觉得它解决了您的问题,您可以accept the answer
    • 听说了!我肯定会在附近问更多问题,希望能见到你。再次感谢安娜
    【解决方案2】:

    欢迎来到这个世界!你不需要它。我认为这应该是正确的方式(对不起我的英语和我糟糕的解释):

    #include <stdio.h>
    int main()
    {
        int c, nl, nc, nw;
    
        nl = 0;
        nc = 0;
        nw = 0;
    
        while ((c = getchar()) != EOF)
        {
            ++nc;
            if (c == '\n')
                ++nl;
            if (c != ' ' && c != '\t' && c != '\n')
                ++nw;
        }
        printf("NL: %d\nNC: %d\nNW: %d\n", nl, nc, nw);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 2021-07-02
      相关资源
      最近更新 更多