c - 在以下脚本中使用 IN 和 OUT 状态需要什么?

标签 c string io getchar

大家好,我刚开始通过 THE c PROGRAMMING LANGUAGE Second Edition 学习 C 布赖恩。 W.克尼南 (ISBN-13: 978-8131704943)

所以这是一个计算字符、行、单词的脚本

#include <stdio.h>

#define IN  1
#define OUT 0

main()
{
    int c, nl, nw, nc, state; 
    /* c = input, nl = new line, nc = new character, nw = new word, state = (IN/OUT) */
    state = OUT;
    nl = nw = nc = 0;
    while ((c = getchar()) != EOF)
    {
        ++nc;
        if (c == '\n')
            ++nl;
        if (c == ' ' || c == '\n' || c == '\t')
            state = OUT;
        else if (state == OUT)
        {
            state = IN;
            ++nw;
        }
    }
    printf(" The number of lines is: %d,\n The number of words is: %d,\n The number of characters is: %d. \n", nl, nw, nc);
}

但是我制作了一个脚本,无需定义状态 IN 和 OUT 即可执行以下操作

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

那么这两者有什么区别,为什么作者要用state来定义IN和OUT呢??

[编辑] 哦!我明白了,脚本只是为了避免两件事: 1.避免单词后有多个空格时的单词计数。 2. 其次,如果间距合适,我的脚本会计算 n-2 个单词。 这使得作者的脚本更加完整.....除了这两个还有别的吗??

也感谢您的回答....

P.S:很抱歉,这有点离题了,可以将问题标记为 [已解决] 还是有其他方法可以做到这一点??

最佳答案

你的版本与他的版本略有不同:在你的程序中,如果你有 N 个连续的空格,它们将被视为 N - 1 个单词,因为每一个空格你都会将单词计数加一。此外,不会考虑最后输入的单词。

关于c - 在以下脚本中使用 IN 和 OUT 状态需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23609836/

相关文章:

Java 找不到 .property 文件 Ubuntu

c++ - 有人试过在 Windows 上编译 Go 吗?它现在似乎支持生成 PE 格式的二进制文件

c++ - 从 C 调用静态 C++ 方法在编译时给出 undefined reference

c - 使用 realloc 进行动态内存分配

python .format(*str) 返回 5348 而不是 50

python - 如何使 BufferedReader 的 peek 更可靠?

c - 解释双星号从数组返回值(在 C 中)

java - Java 中字符串的排列。请解释?

python - 如何从 HTML 字符串中提取 IP 地址?

c - glibc 中的 fxprintf.c 中如何将多字节字符串转换为宽字符字符串?