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.
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)' 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
Ich habe das Update zu ch hinzugefügt und es ist immer noch in der Endlosschleife – Kris