Search code examples
cfilefile-iofgetc

Identifying newline characters in a file using C


I'm trying to read a newline character in a text file and thus count the number of lines in a text document

Content of .txt file:

My
Name
Is
John

Output of my code:

Nm
s
on
Line number is 1

My code:

    #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;
 }

Can somone please explain why this is happening?

Update : Fixed code

    #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;

}

OUTPUT

My
Name
Is
John
Line Number is 3


Solution

  • You are doing twice fgetc in while loop. Also you are copying ch to dh without any particular reason. I improved your code, tested it and it works flawless. There you go:

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

    Also you need to initialize int ch = 0;, because you print it before it gets any value which leads to undefined behavior.