2017-04-30 1 views
0

In diesem Programm funktioniert meine edit() - Funktion nicht richtig.Wenn ich versuche etwas zu schreiben, lösche ich einfach den ganzen Inhalt und im appendText() wird nur ein Wort angehängt? Gibt es eine Möglichkeit, die ganze Zeichenfolge in die zu schreiben Datei?Warum fügt fputs() nur ein Wort in eine Datei ein?

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



main(void){ 

    char fName[100]; 

    printf("Enter file name :\n"); 
    scanf("%s",&fName); //File Name 

    int choice; 
    printf("Enter your choice : \n1.Edit text\n2.Read the contents of the file\n3.Append text\n4.Exit\n"); //Enter choice 
    scanf("%d",&choice); 

    switch(choice){ 

     case 1 : 
      edit(fName);  //Edit text 
      break; 
     case 2 : 
      readContents(fName); //Read file  
      break; 
     case 3 : 
      appendText(fName);  //Append 
      break; 
     case 4 : 
      exit(0);   //Exit 
      break; 
     default : 
      printf("Invalide Option!\n"); 
      break;  
    }//End switch 

}//End main 

//Function to edit contents of the file 
void edit(char file[100]){ 

    int line,temp = 0; 
    printf("Enter the line no. to be edited : \n"); 
    scanf("%d",&line); //Line no 

    char sentence[100]; 
    printf("Enter the content : \n"); 
    scanf("%s",sentence); 

    char str[100]; 
    FILE *fName = fopen(file,"w"); 

    while(!feof(fName)){ 

     temp++; 
     fgets(str,99,fName); 

     if(line == temp) 
      fputs(sentence,fName); break; 

    } 

    printf("\nContents of the file has been updated!\n"); 

    fclose(fName); 


}//End edit() 

//Function to read the contents of the file 

void readContents(char file[100]){ 

    char str[100]; 
    FILE *fName = fopen(file,"r"); 
    while(!feof(fName)){ 
     puts(fgets(str,99,fName)); 
    } 

    fclose(fName); 
    printf("\n"); 
} //End readContents() 


//Funtion to append string to an existing file 

void appendText(char file[100]){ 

    char str[100]; 
    FILE *fName = fopen(file,"a"); 

    printf("Enter your string :\n"); 
    scanf("%s",&str); 

    fputs(str,fName); 

    fclose(fName); 
    printf("\nText added to the file\n"); 


}//End of append() 

Antwort

2

Sie können nicht wirklich den Inhalt einer (Text-) Datei ändern, um eine Zeile so zu ändern, wie Sie es tun. Wenn Sie die neue Zeichenfolge eingeben, überschreiben Sie den Rest der Datei. Sie müssen die gesamte Datei im Speicher lesen, die gewünschte Zeile ändern und dann das ganze in die Datei schreiben. Oder, lesen Sie aus der Datei, schreiben Sie jede Zeile in eine zweite Datei (Ersetzen Sie den Text, wenn Sie es finden), und löschen Sie dann/benennen Sie die Dateien.

Was die appendText von http://www.cplusplus.com/reference/cstdio/scanf/ auf% s (Hervorhebung von mir):

Eine beliebige Anzahl von Nicht-Leerzeichen Zeichen, fand am ersten Leerzeichen Charakter zu stoppen. Ein abschließendes Nullzeichen wird automatisch am Ende der gespeicherten Sequenz hinzugefügt.

Das heißt, Ihr scanf für den Anhang liest nur das erste Wort, also warum nur das erste Wort angehängt wird.

+0

Wie lese ich die Datei im Speicher und ändere dann ihren Inhalt? – Jack

+1

Sie müssten wahrscheinlich Arrays und dynamische Speicherzuweisung verwenden ('malloc/free'). Es ist vielleicht einfacher, die 2-Datei-Methode zu verwenden, bis Sie mehr über die Sprache gelernt haben. Auf diese Weise müssen Sie jeweils nur eine Zeile Text bearbeiten. –

1

Eines der vielen Probleme mit diesem Code ist, dass beim Öffnen der Datei mit dem Modus "w" Sie löschen alle vorhandenen Inhalte. Wenn Sie das nicht möchten, verwenden Sie stattdessen den Modus "r+".

+0

Ich versuchte, dass immer noch nicht funktioniert – Jack

+0

Ich habe gesagt, dass das nur eines der vielen Probleme war. – zwol

Verwandte Themen