2016-11-09 4 views
-1

Ich weiß, wie man Inhalt von einer Datei in einen anderen Buchstaben für Buchstabe kopiert, aber ich soll es Wort für Wort machen. Ich habe diesen Code ausprobiert, aber wenn ich das ausführe, endet meine Ausgabedatei mit jedem Wort in einer neuen Zeile. Wie soll ich Inhalte von einer Datei in eine andere (wie sie ist) Wort für Wort kopieren?Wie kopiert man Inhalt von einer Datei in ein anderes Wort in C?

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char* argv[]) 
{ 
    // Error checking 
    if(argc < 3) 
    { 
     fprintf(stderr, "Please print two arguments"); 
     exit(EXIT_FAILURE); 
    } 

    char* input = argv[1]; 
    char* output = argv[2]; 
    char buffer[4096]; 

    FILE* fp_open = fopen(input, "r"); 
    if(fp_open == NULL) fprintf(stderr, "Unable to open input file"); 

    FILE* fp_write = fopen(output, "w"); 
    if(fp_write == NULL) fprintf(stderr, "Unable to open output file"); 

    while(fscanf(fp_open, "%s", buffer) == 1) 
    { 
     fprintf(fp_write,"%s\n", buffer); 
    } 

    fclose(fp_open); 
    fclose(fp_write); 

    return 0; 
} 

Anmerkung: Ich bin nur für das Lesen aus einer Eingabedatei verwenden fscanf("%s") erlaubt.

P.S. Ich weiß auch, dass es ineffizient ist, es zu tun, aber das ist es, was ich tun soll.

+0

Beenden Sie Ihre Fehlermeldungen mit einem Zeilenumbruch. Fügen Sie den Namen der nicht öffnenden Datei in die Fehlermeldung ein. Verwenden Sie die ungeöffneten Dateien nicht weiter, wenn sie nicht geöffnet werden können. Für die meisten Zwecke können Sie 'sscanf()' nicht verwenden, wenn der Abstand zwischen Wörtern wichtig ist oder wenn Sie Zeilenumbrüche genau verfolgen müssen. Wenn Sie nur '% s' und nicht auch'% c' oder etwas Ähnliches ('getc()' zum Beispiel) verwenden dürfen, dann stecken Sie fest - Sie können nicht unterscheiden, welche Art von Leerzeichen das Zeichen trennt Wörter, weil Sie nicht die Werkzeuge verwenden dürfen, die Sie herausfinden würden. –

+0

Die Formatierung: notiert. Aber gibt es keine Möglichkeit, das zu tun? Wie sagt man zum Beispiel zuerst eine ganze Zeile und scanne sie dann Wort für Wort und dann durch Leerzeichen usw.? – posixKing

+0

Ja; Es gibt Möglichkeiten, es mit ['fgets()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html) (oder ['getline()'] (http: // pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html) auf POSIX-ish-Systemen) und dann mit ['sscanf()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions /sscanf.html) in einer Schleife (siehe [Wie man 'sscanf()' in einer Schleife verwendet] (http://stackoverflow.com/questions/3975236/how-to-use-sscanf-in-loops)). Aber wenn Sie mit 'fscanf (fp,"% s ", buffer)' als einzigen Eingabemechanismus festgefahren sind, dann denke ich, dass Sie abgespritzt werden. –

Antwort

0

da die Anforderung nur die Zeichenfolge mit fscanf zu lesen ist, verwenden Sie die folgende Logik:

char c; 
char tmpbuffer[100], buffer[1000]; 

fp = fopen("file.txt","r"); 
while(fscanf(fp,"%s",tmpbuffer)!=-1) 
{ 
strcat(buffer,tmpbuffer,strlen(tmpbuffer)); 
while((c = fgetc(fp)) == " ") 
{ 
strcat(buffer,&c,1); 
} 
fseek(fp,-1,SEEK_CUR); 
} 

hier der Puffer enthält die gesamte Zeichenfolge in einer Linie, so dass Sie die gesamte Zeile in die Ausgabedatei schreiben kann.

Verwandte Themen