Dateien abrufen und vervollständigen



  • Hallo!

    Ich stehe hier vor einem (wahrscheinlich kleinen und für mich trotzdem großen) Problem: Ich möchte aus einer Datei etwas abrufen und danach noch etwas in diese hinzufügen. Das Abrufen funktioniert, jedoch nicht das Hinzufügen.
    Wo liegt mein Fehler?

    MfG

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
      char eingabe[20], daten[20];
      FILE *fp;
    
      fp=fopen("Datei.txt", "a+");
    
      if (fp==0) printf("Keine Datei vorhanden!");
    
      else
    
      fscanf(fp, "%s", &daten);
      printf("%s wurde eingegben\n", daten);
    
      printf("Bitte etwas eintippen: ");
      scanf("%s", &eingabe);
    
      fprintf(fp, "%s\n", eingabe);
    
      fclose(fp);
    
      system("PAUSE");	
      return 0;
    }
    


  • Wenn man's richtig tippt, dannn fuktioniert es auch...;)

    // edit: weg

    der else-Zweig der if-Entscheidung umfasst ja mehr als einen Befehl, darum müssen die geschweiften klammern gesetzt werden.



  • Habe jetzt zu diesem Programm die Klammern hinzugefügt, funktioniert jedoch immer noch nicht. Ich bekomme den Inhalt der Datei nach wie vor korrekt angezeigt und kann anschließend etwas tippen, dieses wird jedoch nicht in die Datei übernommen...

    MfG

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
      char eingabe[20], daten[20];
      FILE *fp;
    
      fp=fopen("Datei.txt", "a+");
    
      if (fp==0) printf("Keine Datei vorhanden!");
    
      else
      {
      fscanf(fp, "%s", &daten);
      printf("'%s' wurde eingegben\n", daten);
    
      printf("Bitte etwas eintippen: ");
      scanf("%s", &eingabe);
    
      fprintf(fp, "%s\n", eingabe);
    
      fclose(fp);
    
      system("PAUSE");	
      }
      return 0;
    }
    


  • oh, man sollte vorher mal gucken... das kann ja auch gar nicht gehn, weil du immer in ne neue zeile schreibst, aber nur die erste aussliest!

    machs mal so:

    #include <stdio.h> 
    #include <stdlib.h> 
    
    int main(void) 
    {
    	char eingabe[20], daten[20]; 
    	FILE *fp; 
    
    	fp=fopen("Datei.txt", "a+"); 
    
    	if(fp==0)
    		printf("Keine Datei vorhanden!"); 
    	else
    	{
    		while(!feof(fp))
    		{
    			fscanf(fp, "%s", daten); 
    			printf("%s wurde eingegben\n", daten);
    		}
    		printf("Bitte etwas eintippen: "); 
    		scanf("%s", &eingabe); 
    		fprintf(fp, "%s\n", eingabe);
    		fclose(fp); 
    	}
    	return 0; 
    }
    

    habs noch net getestet, aber so sollte es gehn...:)



  • Jetzt muss ich zu später Stunde noch einmal stören...
    Dein Programmcode hat funktioniert, DANKE!

    Jetzt kommt leider noch etwas.
    Ich habe eine Datei, diese besteht aus einer Zeile, diese wiederum aus zwei Wörtern. Das Programm soll diese zwei Wörter ausgeben und anschließend eine neue Zeile in der Datei beginnen. In diese Zeile soll es die Variable "eingabe" setzen und danach das Programm beenden.

    Nun das Problem:
    Wenn die zweite Zeile zuvor nicht existiert in der Datei, deklariert das Programm die Variable "eingabe" und schreibt damit in die Datei. PERFEKT!

    Starte ich das Programm jedoch ein zweites Mal (die beiden Wörter der ersten Zeile sollen - und werden auch - angezeigt), so möchte ich, dass ich wieder eine "eingabe" machen kann und mir das Programm an das Ende der letzten "eingabe" in der Datei weiterschreibt. Dieses tut es jedoch nicht. Die Datei bleibt unverändert mit der zweiten Zeile und dem ersten Wort vom ersten Mal.

    Was müsste ich im Programmcode verändern bzw. hinzufügen, dass ich fortan die zweite Zeile "füllen" kann?

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
      char wort1[20], wort2[20], eingabe[20];
      FILE *fp;
    
      fp=fopen("Datei.txt", "a+");
    
      if (fp==0) printf("Keine Datei vorhanden!");
    
      else
      {
      fscanf(fp, "%s", &wort1);
      printf("Das erste Wort lautet '%s'\n", wort1);
    
      fscanf(fp, "%s", &wort2);
      printf("Das zweite Wort lautet '%s'\n", wort2);
    
      fprintf(fp, "\n");
    
      printf("Bitte fuer die zweite Zeile in der Datei eintippen: ");
      scanf("%s", &eingabe);
      fprintf(fp, "%s ", eingabe);
    
      fclose(fp);
    
      system("PAUSE");	
      }
      return 0;
    }
    


  • für mal bevor du "eingabe" in die datei schreibst folgendes ein

    fseek(fp,0L,SEEK_END); /*setzt den dateipointer fp ans ende der datei */
    

    sollte dann gehen

    Wenn die zweite Zeile zuvor nicht existiert in der Datei, deklariert das Programm die Variable "eingabe" und schreibt damit in die Datei. PERFEKT!

    was willst du uns damit sagen, deklariert "eingabe"???



  • Vielen Dank!!!
    Die eine Zeile hat wohl gefehlt.
    Das Zitat sollte soviel bedeuten wie: Besteht noch keine zweite Zeile in der Datei, wird diese angelegt durch ein Wort, welches eingetippt wird.
    Diese (falsche) Formulierung lag wohl an der späten Zeit.

    MfG



  • @Neuer Anfänger
    Ich frag mich wie dein Programm jetzt funktionieren kann. Da ist nämlich noch ein Fehler drin. Wenn du Strings mit scanf() einliest, dann brauchst du den &-Operator nicht, da du ja schon eine Adresse übergibst.

    Also nicht:

    fscanf(fp, "%s", &wort1);
    

    Sondern:

    fscanf(fp, "%s", wort1);
    

    Dass es vielleicht trotzdem funktioniert, ist Zufall.

    Und BITTE! verwende nicht system("PAUSE") => böseee!!!!
    Eine gute Alternative ist jede Einlesefunktion von der Tastatur, die C bietet.


Anmelden zum Antworten