使用C标识文件中的换行符

时间:2016-06-07 17:39:58

标签: c file file-io fgetc

我正在尝试在文本文件中读取换行符,从而计算文本文档中的行数

.txt文件的内容:


名称

约翰

输出我的代码:


小号

行号为1

我的代码:

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


    int main()
    {

         FILE* filepointer ;
          filepointer = fopen("C:\\Users\\Summer Work\\Let's C\\Comnsole\\TestFile.txt","rb+") ;

        int count = 0 ;
        int ch;
        printf("%c\n",ch) ;

          while ((ch = fgetc(filepointer)) != EOF)
          {
             printf("%c",ch) ;
             ch = fgetc(filepointer)  ;

            char dh = ch;
            if (dh == '\n')
            count++ ;
           }


         printf("\nLine number is %d",count) ;

         fclose(filepointer) ;
         getchar() ;
         return 0;
 }
是的,请解释为什么会发生这种情况?

更新: 固定代码

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


int main()
{

   FILE* filepointer ;
filepointer = fopen("C:\\Users\\Summer Work\\Let's C\\Comnsole\\TestFile.txt","rb+") ;

int count = 0 ;
int ch;


while ((ch = fgetc(filepointer)) != EOF)
{
    printf("%c",ch) ;
    if (ch == '\n')
        count++ ;

}


printf("\nLine number is %d",count) ;

fclose(filepointer) ;
getchar() ;
return 0;

}

输出


名称

约翰
行号是3

1 个答案:

答案 0 :(得分:0)

你在while循环中进行了两次fgetc。你也没有任何特别的理由将ch复制到dh。我改进了你的代码,对它进行了测试,它完美无瑕。你去了:

      while ((ch = fgetc(filepointer)) != EOF)
      {
        printf("%c",ch);
        if (ch == '\n')
           count++;
      }

此外,您需要初始化int ch = 0;,因为您在获得任何导致未定义行为的值之前将其打印出来。