2016-03-25 17 views
0

Ich habe einige Probleme mit in Dateien.Lesen von Zahlen und Zeichen aus einer Datei

Ich versuche, Zahlen und Sonderzeichen aus einer Datei einzulesen. Ich habe eine Datei mit Zahlen und Operanden erhalten. Die Datei wird von der Befehlszeile eingelesen.

Beispieldatei:

1 4 + 5* 
2 - 4 + 8 
7 -2 +1 +3 
0 

So wird die Datei mit 0 beendet, und jeder neuen Zeile ist ein Ausdruck. Was mein Code versucht, zu einer Zeit gelesen wird, damit

1 4 + 5 * 

Arbeit in einem Ausdruck zu tun, dann zum nächsten Ausdruck weitergehen (bis die Datei liest 0) gewonnen. Es muss die Sonderzeichen auch enthalten (+, *, -, ect)

Das ist mein Code so weit. Ich weiß nicht, die Länge jedes Ausdrucks (es variieren kann), so erklärte ich nur statisch es als eine Länge von 50.

int main(int argc, char* argv[]){ 


    FILE* input; 
    char expression[50]; 
    int i; 
    char ch; 


    input = fopen(argv[1], "r"); 
    if(input == NULL){ 
     printf("File does not exist! Exiting program!"); 
     return 0; 
    } 

    do{ 
     ch= fgetc(input); 
     if(ch == 0) 
      break; 

     while((ch != '\n')){ 
     //printf("test2\n"); 
      expression[i] = ch; 
      i++; 
      ch = fgetc(input); 
     } 

    //plan to do something with each expression here 
    } while(ch != EOF); 


    for(i=0; i < (strlen(expression)); i++) 
     printf("%c ", expression[i]); 

    return 0; 
}  

Alles, was ich versuche, hier zu tun ist, zu überprüfen, um zu sehen, ob es wird lese die Ausdrücke ein und drucke sie richtig aus. Wenn ich versuche, es auszuführen, erhalte ich einen segfault, setze die test2-Anweisung ein und drucke sie aus (Endlosschleife), bis sie Fehler segelt.

Jede Hilfe würde sehr geschätzt werden.

+1

Ihre innere while-Schleife läuft bis segfault, weil Sie 'ch' nie aktualisieren. Sie haben vergessen, es auf die Ausgabe von 'fgetc' zu setzen. Außerdem sollten Sie überprüfen, ob 'fgetc' 0 ergibt. – szym

+1

1)' char expression [50]; '(für null-terminate) ->' char expression [50] = {0}; '2)' char ch; '(für EOF) ->' int ch; '3)' if (ch == 0) '->' if (ch == '0') '(?) 4)' i ++; fgetc (Eingabe); '->' i ++; ch = fgetc (input); ' – BLUEPIXY

+0

Ich habe das Update zu ch hinzugefügt und es ist immer noch in der Endlosschleife – Kris

Antwort

0

Für Ihre Art von Datei haben:

while((ch=fgetc(input)) != '0') 
    { 
    /* your main processing */ 
    if (ch == '\n') 
    { 
    /* deal with end of expression */ 
    } 

    } 

mehrere während Blöcke und fgetc (Eingang) hat; ist für alle verwirrend.

+0

Ich versuche es auf diese Weise zu tun, aber ch = fgetc (input) erhält den ganzen Ausdruck auf einmal und nicht ein Zeichen nach dem anderen. – Kris