2012-12-22 17 views
5

Es ist üblich, bis zum Ende der Datei zu lesen, aber ich bin interessiert, wie konnte ich Daten (eine Reihe von Zahlen) aus einer Textdatei bis zum Ende eines linie? Ich habe die Aufgabe, mehrere Zahlenreihen aus einer Datei zu lesen, die in neuen Zeilen stehen. Hier ist ein Beispiel des Eingangs:lesen Daten von Datei bis Ende der Zeile in C/C++

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

Erste Serie: 1 2 53 7 27 8

Zweite one: 67 5 2

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

Ich muss sie getrennt von der Datei lesen, aber jeder bis zum Ende der Zeile. Ich habe diesen 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); 
    } 

Es liest bis zum Ende der Datei, so dass es nicht ganz das tut, was ich erwarten würde. Was schlagen Sie vor?

+0

Gibt es einen bestimmten Grund, Freopen zu verwenden und von Stdin zu lesen? –

Antwort

5

Verwenden fgets() eine komplette Linie zu lesen, dann analysieren, um die Linie (evtl. mit 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; 
} 

können Sie die code running at ideone sehen.

+1

Wenn Sie diese Idee verwenden möchten, stellen Sie sicher, dass Sie Code hinzufügen, um mit seltsamen Eingaben umzugehen (Dateien mit ungültigen Daten (einschließlich extra langer Zeilen), Leerzeilen, Zeilen mit abschließenden Leerzeichen, leeren Dateien, ...). .) – pmg

2

Die \ n die Flucht für neue Linie sein sollte, versuchen Sie dies stattdessen

const char EOL = '\n'; 

u es war zu arbeiten? Dies sollte helfen:

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