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

2

6

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?

Wheeler answered 22/12, 2012 at 10:6 Comment(1)
Any specific reason to use freopen and read from stdin?Grumpy
G
6

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.

Gasper answered 22/12, 2012 at 11:8 Comment(1)
If you're going to use this idea, make sure you add code to deal with strange inputs (files with bad data (including extra long lines), empty lines, lines with trailing spaces, empty files, ..., ...)Gasper
S
2

The \n should be the escape for new line, try this instead

const char EOL = '\n';

did u get it working? this should help:

#include <stdio.h>
FILE *fp;
const char EOL = '\n'; // unused . . .

void main()
{
    fp = fopen("26.txt", "r");
    char buffer[128];
    int a[100];
    int i = 0;
    freopen("26.txt","r",stdin);

    while(scanf("%i",&a[i])==1 && buffer[i] != EOF)
        ++i;

    //print values parsed to int array.    
    for(int j=0; j<i; ++j)
        printf("[%i]: %i\n",j,a[j]);

    fclose(stdin);
}  
Subinfeudation answered 22/12, 2012 at 10:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.