2016-03-26 8 views
2

Ich versuche, von einer Datei Zeile für Zeile zu lesen, indem Sie es durch eine While-Schleife, die angewiesen wird, zu beenden, sobald EOF erreicht wurde. Aber aus irgendeinem Grund, sobald die letzte Zeile gelesen wurde und die while-Bedingung erneut überprüft wird, friert das Programm gerade ein.Benötigen Sie Hilfe beim Lösen seltsamer fscanf Problem

Dies ist mein Code:

char character1; 
int number1; 

while(fscanf(file,"%s %d",&character1, &number1) != EOF){ 
    //printf("%s %d\n",character1,number1) 
} 

Meine Dateien Inhalt:

A 1 
B 2 
C 3 
D 4 
E 5 

Ausgang:

A 1 
B 2 
C 3 
D 4 
E 5 
| <---Blinking terminal pointer currently there 

Kann mir jemand helfen, dies herauszufinden?

EDIT: Ich öffne/schließe nicht die Datei in main(), ich mache es in einer anderen Funktion, könnte dies ein Problem verursachen?

+0

Verwenden Sie "% c" anstelle von "% s" – BLUEPIXY

+0

@BLUEPIXY hat nur leider die gleichen Ergebnisse erzielt. –

+0

Eingang wartet (oder Endlosschleife?) Ist in anderen Teilen vorhanden – BLUEPIXY

Antwort

1

Verbessern Sie die Zustandsprüfung in der while-Schleife. Der fscanf() kann mehr Ergebnisse als EOF oder eine positive Zahl erzeugen. Es kann auch eine positive Zahl zurückgeben, wenn ein Dateiende auftritt, nachdem die Konvertierung begonnen hat. Das bedeutet, dass bei einer Konvertierung etwas nicht in Ordnung ist und die Daten beim nächsten Durchlauf, um mehr Daten aus dem Stream zu erhalten, noch vorhanden sind. Sie stecken also fest und können diese fehlgeschlagene Konvertierung nicht unendlich oft umwandeln.

Sie suchen nach 2 Eingabefeldern, prüfen Sie, ob fscanf() 2 Eingabefelder gefunden hat, um weiter zu loopen.

0

Das Problem ist, dass Ihr FSCANF das \ r oder \ n am Ende jeder Zeile liest. Erstellt einfach einen Puffer, um es zu ignorieren und wird gut sein. Ich habe Folgendes getan und es hat reibungslos funktioniert.

char character1; 
int number1; 
char buffer[2]; // will read the end of line 

while(fscanf(file,"%c %d",&character1, &number1) != EOF){ 
    fgets(buffer, 2, file);// does the job 
    printf("[%c] [%d]\n",character1,number1); 
} 
Verwandte Themen