开发者

Reading one line at a time in C

开发者 https://www.devze.com 2022-12-21 23:57 出处:网络
Which method can be used to read one line at a time from a file in C? I am using the fgets function, but it\'s not working.

Which method can be used to read one line at a time from a file in C?

I am using the fgets function, but it's not working. It's reading the space se开发者_如何学Pythonparated token only.

What to do?


Use the following program for getting the line by line from a file.

#include <stdio.h>
int main ( void )
{
  char filename[] = "file.txt";
  FILE *file = fopen ( filename, "r" );

  if (file != NULL) {
    char line [1000];
    while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ {
      fprintf(stdout,"%s",line); //print the file contents on stdout.
    }

    fclose(file);
  }
  else {
    perror(filename); //print the error message on stderr.
  }

  return 0;
}


This should work, when you can't use fgets() for some reason.

int readline(FILE *f, char *buffer, size_t len)
{
   char c; 
   int i;

   memset(buffer, 0, len);

   for (i = 0; i < len; i++)
   {   
      int c = fgetc(f); 

      if (!feof(f)) 
      {   
         if (c == '\r')
            buffer[i] = 0;
         else if (c == '\n')
         {   
            buffer[i] = 0;

            return i+1;
         }   
         else
            buffer[i] = c; 
      }   
      else
      {   
         //fprintf(stderr, "read_line(): recv returned %d\n", c);
         return -1; 
      }   
   }   

   return -1; 
}


If you are coding for a platform that has the GNU C library available, you can use getline():

http://www.gnu.org/s/libc/manual/html_node/Line-Input.html


The fgets function will read a single line from a file or num characters where num is the second parameter passed to fgets. Are you passing a big enough number to read the line?

For Example

// Reads 500 characters or 1 line, whichever is shorter
char c[500];
fgets(c, 500, pFile);

Vs.

// Reads at most 1 character
char c;
fgets(&c,1,pFile);


This is more of a comment than a complete answer, but I don't have enough points to comment. :)

Here's the function prototype for fgets():

char *fgets(char *restrict s, int n, FILE *restrict stream);

It will read n-1 bytes or up to a newline or eof. For more info see here


fgets() should be the way to go …


use either fgets if you know that your lines will fit into buffer or use fgetc for more control over reading


Use fgets to read from the line, and then use getc(...) to chew up the newline or end-of-line to continue reading....here's an example of forever reading a line...

// Reads 500 characters or 1 line, whichever is shorter
char c[500], chewup;
while (true){
    fgets(c, sizeof(c), pFile);
    if (!feof(pFile)){
        chewup = getc(pFile); // To chew up the newline terminator
        // Do something with C
    }else{
        break; // End of File reached...
    }
}


Source of Error:

Actually it was not my fault.. In this case . I was using strtok function and and accidently modified my original my original string. Hence while printing I was getting the error...

Thanks Everyone for Helping me.. :)


You can use fscanf instead of fgets. Because fgets fscanf for characters including spaces but while using fscanf you can separately access to data saved in a file.eg there be a file having name class roll.now declare a string and two integers line.

0

精彩评论

暂无评论...
验证码 换一张
取 消