2016-07-23 8 views
-1

Ich brauche einen Hinweis darauf, wie ich weiß, wann ich eine Zeichenfolge aus einer Datei speichern soll, nachdem ich ein Leerzeichen zwischen den Wörtern angeklickt habe. Nachdem ich eine Datei geöffnet und gelesen habe, zum Beispiel: Die erste Zeile, die da ist ist: 427 671 +. Ich muss "427" in einem Array von int speichern, dasselbe mit "671" und "+" in einer Variablen.Wie kann ich aufhören, Zeichen aus einer Datei zu speichern, wenn ein Leerzeichen vorhanden ist?

Bis jetzt habe ich herausgefunden, wie man die ganze Linie liest und es druckt, aber das Problem, das ich habe, ist, Zeichen durch Zeichen zu lesen und es zu speichern, bevor ich ein Leerzeichen trete.

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <float.h> 
#include <Laboratorio.h> 
#include <string.h> 
int main(int argc, char **argv) { 
    FILE *datos; 
    FILE *resultados; 
    char bin[64]="",hex[16]=""; 
    int oct[21]; 
    ep = fopen (argv[1], "r"); 
    if (ep==NULL) { 
     printf("Archivo vacio."); 
    return 0; 
    }else{ 
    while (fgets(bin,64,ep)!=NULL){ 
     printf("%s",bin); 
    } 
    fclose(ep); 
} 
} 
+1

Wenn Sie die Datei nicht öffnen können, sollten Sie die Fehlermeldung an stderr ausgeben und einen Wert ungleich null zurückgeben. zB 'if (ep == NULL) {perror (argv [1]); return EXIT_FAILURE;} ' –

+0

Verwenden Sie [' strtok() '] (http://stackoverflow.com/questions/3889992/how-does-strtok-split-the-string-into-tokens-in-c), um sie zu teilen Sie treffen auf einen Leerraum. –

+1

Sie haben viele Möglichkeiten. Eine besteht darin, 'scanf()' und den '% s' Konvertierungsspezifizierer zu verwenden; Es bleibt jedes Mal im weißen Bereich stehen. Eine weitere Möglichkeit ist die Verwendung von Token-Code in Zeilen beim Lesen jeder Zeile - 'strtok()' usw. (verwenden Sie 'strtok_r()' oder 'strtok_s()', wenn sie verfügbar sind, aber alle die ursprüngliche Zeichenfolge ändern) oder Funktionen wie 'strpbrk()' und 'strspn()' und 'strcspn()'. Es gibt zahlreiche Fragen zu SO über die Konvertierung von Postfix zu Infix und verwandte Probleme; sie können auch gut helfen. –

Antwort

1

Der einfachste Weg, dies zu tun, um einen char-Variable zu haben wäre und speichert jedes Zeichen in sie eines nach der anderen in etwa so:

while ((ch = getc(stream)) != EOF) 
{ 
// do stuff with char 
} 

, nachdem Sie das Zeichen bekommen können Sie entscheiden, was zu tun ist Vergleichen Sie es mit 32 (Leerzeichen), um zu wissen, wann Sie aufhören sollen.

Wenn das Zeichen eine Zahl ist, können Sie es in einen Puffer setzen, bis Sie ein Leerzeichen erreichen. Dann müssen Sie nur die Funktion atoi verwenden, die einen Zeiger auf eine Zeichenfolge empfängt und eine int-Darstellung der Zeichenfolge zurückgibt . Beispiel: wandelt die Zeichenfolge "432" in einen Int 432 um.

Verwandte Themen