4

假设文件hello\n stack overflow \n中有一个文本文件,输出应该是2因为有 2 个\n序列。相反,我得到一个作为答案。我究竟做错了什么?这是我的代码:

int main()
{
    FILE                *fp = fopen("sample.txt", "r");    /* or use fopen to open a file */
    int                 c;              /* Nb. int (not char) for the EOF */
    unsigned long       newline_count = 1;

        /* count the newline characters */
    while ( (c=fgetc(fp)) != EOF ) {
        if ( c == '\n' )
            newline_count++;
        putchar(c);
    }

    printf("\n  %lu newline characters\n ", newline_count);
    return 0;
}
4

1 回答 1

3

试试这个:

int main()
{
    FILE                *fp = fopen("sample.txt", "r");    /* or use fopen to open a file */
    int                 c, lastchar = 0;              /* Nb. int (not char) for the EOF */
    unsigned long       newline_count = 0;

        /* count the newline characters */
    while ( (c=fgetc(fp)) != EOF ) {
        if ( c == 'n' && lastchar == '\\' )
            newline_count++;
        lastchar = c; /* save the current char, to compare to next round */
        putchar(c);
    }

    printf("\n  %lu newline characters\n ", newline_count);
    return 0;
}

实际上,文字\n是两个字符(一个字符串),而不仅仅是一个。所以你不能简单地把它当作一个角色来比较。

编辑 由于\n是两个字符, the\和 the n,我们必须记住我们读入的最后一个字符,并检查当前字符是否是 ann并且前一个字符是 a \。如果两个测试都为真,这意味着我们已经\n在文件中找到了序列。

于 2013-02-06T03:26:38.833 回答