我需要读取文件中的新行字符

时间:2013-02-06 03:17:26

标签: c file

假设文件中的文本文件中包含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;
}

1 个答案:

答案 0 :(得分: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是两个字符\n,我们必须记住我们读入的最后一个字符,并检查当前字符是否为n以及之前的字符字符是\。如果两个测试均为真,则表示我们已将序列\n放在文件中。