2016-09-05 3 views
2

Ich versuche Zeile für Zeile aus einer Datei zu lesen und die Zeile auszudrucken. Aber wenn ich den Code starte, fängt er an, die Zeilen beginnend in der Mitte auszugeben.C - Zeilen aus Datei lesen

char temp[300]; 

if (input == NULL) { 
    printf("Can't open input file.\n"); 
    exit(-1); 
} 

while (!feof(input)) { 
    fgets(temp, 300, input); 
    printf("%s \n", temp); 
} 
fclose(input); 

Irgendwelche Gründe dafür in der Mitte zu beginnen?

Edit: So und Beispiel dafür, was ich in der Mitte meine ist, dass ich eine Liste wie diese

7,12 Angry Men,1957 
95,2001: A Space Odyssey,1968 
211,8 and a Half,1963 
190,A Beautiful Mind,2001 
68,A Clockwork Orange,1971 
223,A Fistful of Dollars,1964 
108,A Separation,2011 
233,A Streetcar Named Desire,1951 
40,Alien,1979 
58,Aliens,1986 
96,All About Eve,1950 
224,All Quiet on the Western Front,1930 
250,All the President's Men,1976 
91,Amadeus,1984 
69,Amelie,2001 
54,American Beauty,1999 
33,American History X,1998 
189,Amores Perros,2000 

haben und wenn ich auf die printf bekommen zeigt es nur dieses

58,Aliens,1986 
96,All About Eve,1950 
224,All Quiet on the Western Front,1930 
250,All the President's Men,1976 
91,Amadeus,1984 
69,Amelie,2001 
54,American Beauty,1999 
33,American History X,1998 
189,Amores Perros,2000 

EDIT2 : Ich habe eine Änderung in dem Programm gemacht, um die \ n in printf

loszuwerden und das Problem behoben. Gibt es einen Grund, warum die \ n dieses Problem verursacht?

+0

Führen Sie den folgenden Test durch: pipe die Ausgabe Ihres Programms in eine Datei; dann schauen Sie sich diese Datei mit einem (gut!) reinen Texteditor an. Sind alle Linien drin? – usr2564301

+0

Ich öffnete meine Datei im Editor und verglich sie mit meinen Ergebnissen, so wie ich die fehlenden Einträge in der Liste bemerkte. –

+0

Gut gemacht! (Grund, warum ich gefragt habe, war, dass "nicht sichtbar" bedeuten könnte, dass sie * nur wegen der irrtümlichen Wagenrückkehr auf dem Bildschirm * überschrieben wurden. Ich hatte das selbst.) – usr2564301

Antwort

3

Werfen Sie einen Blick auf Why is “while (!feof (file))” always wrong?

fgets ist genug:

while (fgets(temp, 300, input) != NULL) { 
    printf("%s \n", temp); 
} 

Auch, verwenden Sie keine magische Zahlen wie 300, Änderung

while (fgets(temp, sizeof temp, input) != NULL) { 
    printf("%s \n", temp); 
} 

es beginnt Ausdrucken die Linien beginnend in der Mitte

Beachten Sie, dass fgets die abschließende Zeilenumbruch '\n' enthält und Sie müssen es nicht in die printf aufnehmen, meinst du das von "in der Mitte"?

+0

Danke! Allerdings bekomme ich immer noch nicht die gesamte Liste aus der Datei. Es beginnt immer noch in der Mitte. Also, wenn die Liste war Apfel, Banane, Traube, Ananas, Kiwi das Programm nur Trauben, Ananas, Kiwi –

+0

Das ist wirklich seltsam, bist du sicher, dass Sie nicht eine alte Version Ihrer Datei verwenden? –

+0

Nein, ich versuchte es zu speichern und wieder zu öffnen und gab mir immer noch die gleichen Ergebnisse. –