2012-12-22 12 views
5

Często czyta się do końca pliku, ale interesuje mnie, jak mogę odczytać dane (serię liczb) z pliku tekstowego do końca linia? Mam zadanie przeczytać kilka serii liczb z pliku, które są umieszczone w nowych liniach. Poniżej przedstawiono przykład wprowadzenia:odczytać dane z pliku do końca wiersza w C/C++

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

Pierwsza seria: 1 2 53 7 27 8

Drugi z: 67 5 2

Trzeci: 1 56 9 100 2 3 13 101 78

Muszę je czytać oddzielnie od pliku, ale każdy do końca wiersza. Mam ten kod:

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

Czyta się do końca pliku, więc nie robi dokładnie tego, czego bym się spodziewał. Co sugerujesz?

+0

Jakiś konkretny powód używania freopen i czytania ze standardowego wejścia? –

Odpowiedz

5

Zastosowanie fgets() aby przeczytać pełną linię, a następnie przetworzyć linię (ewentualnie z 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; 
} 

Można zobaczyćcode running at ideone.

+1

Jeśli zamierzasz użyć tego pomysłu, dodaj kod, aby poradzić sobie z dziwnymi danymi wejściowymi (pliki ze złymi danymi (w tym dodatkowe długie linie), puste linie, linie z końcowymi spacjami, puste pliki, ..., .. .) – pmg

2

\ n powinny być ucieczki dla nowej linii, spróbuj zamiast tego

const char EOL = '\n'; 

nie u dostać to działa? to powinno pomóc:

#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); 
} 
Powiązane problemy