C线计数器

时间:2014-11-25 14:59:59

标签: c

我正在读一本名为C Programming Language 2nd Edition的书。它教授一个叫做字符计数的程序。但根据输出它没有。它只是取得了角色,什么也没做。 这是第一个版本:

#include <stdio.h>
#include <stdlib.h>

main() {
    int c, nl;

    nl = 0;
    while ((c = getchar()) != EOF)
        if (c == '/n')
            ++nl;
    printf("%d\n", nl);
}

因此,当我输入我的句子并按Ctrl+Z来满足EOF时,它会给我零:

I am a good person
CTRL+Z
0

Press any key to return

它应该计算线条并且是一个我无法理解的初学者。

4 个答案:

答案 0 :(得分:3)

虽然直接问题是将'/n'替换为'\n'的简单情况(即转义 n换行符,这是反斜杠的作用) ,您的代码编译和运行的事实是由于C99标准:

  

6.4.4.4p10:“包含多个字符(例如'ab')的整数字符常量的值,或包含字符或   不映射到单字节执行的转义序列   字符,是实现定义的。“

'/n'是一个字符数组,由正斜杠和字母n组成。

一旦你修复了它,你就需要对字符进行更改而不仅仅是换行字符。

答案 1 :(得分:2)

显然,实现应该只计算在if(c=='\n')条件中实现的换行符数,而不是总字符数。程序会在您的输入上返回0,因为它不包含换行符。

答案 2 :(得分:0)

可能是程序想要知道下一个字符不是一行('\n'),所以你需要:

#include <stdio.h>
#include <stdlib.h>

main() {
    int c, nl;

    nl = 0;
    while ((c = getchar()) != EOF)
        if (c != '\n')
            ++nl;
    printf("%d\n", nl);
}

这将计算字符的数量,但还有其他转义字符,例如'\t',所以我不太确定该程序应该做什么,但我认为在你的书中你会找到更多描述澄清那部分

用于计算行数的

只需将'/ n'更改为'\ n',就像你现在所知道的那样

答案 3 :(得分:0)

看起来好像你错过了一组{}括号:

#include <stdio.h>
#include <stdlib.h>

main()
{
    int c, nl;

    nl = 0;
    while((c = getchar()) != EOF)
    {   // <- This starts the block to be repeated
        if (c == '\n')
        {   // <- This is just to keep the code 'safe' ...
            ++nl;
        }   // <- ... as is this
    }   // <- This ends the block to be repeated
    printf("The number of New Line characters entered was %d\n", nl);
}