Search code examples
cfopeneofeol

read data from file till end of line in C/C++


It is common to read until end of file, but I am interested in how could I read data (a series of numbers) from a text file until the end of a line? I got the task to read several series of numbers from a file, which are positioned in new lines. Here is an example of input:

1 2 53 7 27 8
67 5 2
1 56 9 100 2 3 13 101 78

First series: 1 2 53 7 27 8

Second one: 67 5 2

Third one: 1 56 9 100 2 3 13 101 78

I have to read them separately from file, but each one till the end of line. I have this code:

    #include <stdio.h>
    FILE *fp;
    const char EOL = '\\0';
    void main()
    {
        fp = fopen("26.txt", "r");
        char buffer[128];
        int a[100];
        int i = 0;
        freopen("26.txt","r",stdin);
        while(scanf("%d",&a[i])==1 && buffer[i] != EOL)
             i++;
        int n = i;
        fclose(stdin);
     }  

It reads until the end of the file, so it doesn't do quite what I would expect. What do you suggest?


Solution

  • Use fgets() to read a full line, then parse the line (possibly with strtol()).

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
      char buffer[10000];
      char *pbuff;
      int value;
    
      while (1) {
        if (!fgets(buffer, sizeof buffer, stdin)) break;
        printf("Line contains");
        pbuff = buffer;
        while (1) {
          if (*pbuff == '\n') break;
          value = strtol(pbuff, &pbuff, 10);
          printf(" %d", value);
        }
        printf("\n");
      }
      return 0;
    }
    

    You can see the code running at ideone.