2016-06-07 4 views
-1

Я пытаюсь прочитать символ новой строки в текстовом файле и, таким образом, подсчитать количество строк в текстовом документеОпределение символов новой строки в файле с помощью C

Содержание файла .txt:

Мои
Имя
Является
Джон

Выход моего кода:

Нм
s
на
числа строчками 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; 
} 

Может Сомон, пожалуйста, объясните, почему это происходит?

Update: Исправлен код

#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

+2

Вы вызываете 'fgetc' дважды в каждом цикле. Таким образом, вы печатаете/проверяете альтернативные символы. –

+0

Примечание: нет необходимости копировать 'ch' в переменную типа' char', так как '' \ n'' имеет тип 'int'. –

+0

О, отсортировано. Спасибо! @Vane –

ответ

0

Вы делаете дважды fgetc во время цикла. Также вы копируете ch в dh без какой-либо конкретной причины. Я улучшил ваш код, протестировал его, и он работает безупречно. Там вы идете:

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

Кроме того, необходимо инициализировать int ch = 0;, потому что вы печатаете его, прежде чем он получает какое-либо значение, которое приводит к неопределенному поведению.

+0

Да, я понял. Спасибо. –