Textausgabe in txt-datei speichern



  • Hallo, ich programmiere grade ein kleines Spiel um hierin regelmäßig den Spielstand ausgeben zu lassen habe ich folgende Funktion geschrieben:

    void spielstand(){
              for(z=0;z<size;++z ) printf(" ");
              printf("  1.\n\n");
              printf("     ");
              for(z=(size/2)-2;z>=0;z--){
    
                        printf("%d ", topf1[z]);
                        }
    
                        printf("\n");
              printf("%d", topf1[size/2]);
              for(z=0;z<size+7;++z ) printf(" ");
              printf("%d \n", topf1[size]);
              printf("     ");
              for(z=(size/2)+1;z<size;++z){
                        printf("%d ", topf1[z]);
                                       }
                      printf("\n\n");
                      printf("    1.\n");
    
              }
    

    Meine eigentliche Frage ist, wie schaffe ich es die Ausgabe dieser Funktion in eine Textdatei zu speichern und regelmäßig dann den neuen Stand wieder hinten dran zu hängen?
    Ich hoffe jemand kann mir helfen 🙂
    mfg



  • Mit fprintf...



  • Jetzt nichts gegen dich, solche Fragen tauchen hier ja dauernd auf; aber was ist eigentlich so schwer daran auf http://www.cplusplus.com/reference/clibrary/ zu gehen und sich eine geeignete Funktion raus zu suchen? 😃



  • Indem du deine Spielstanddatei im Append-Modus öffnest, z.B.:

    FILE *f = fopen("spielstand.txt","a+t");
    

    und dann deine "printf(" Anweisungen durch "fprintf(f," ersetzt nebst abschließendem

    fclose(f);
    


  • Vielen Dank,
    ja ich weiß tut mir leid habs jetzt aber hingekriegt



  • Aber hat einer ne Idee woran es liegen kann, dass wen ich die fprintf Funktion nutze der letzt Wert meien Arrays verändert wird?
    Sowohl in Der Text Datei als auch in der Konsole?
    mfg



  • Darf eigentlich nicht passieren, am besten Du postest da mal deinen code.. (und dann gleich noch mal mit printf - wie es funktioniert)



  • Also so sehen die beiden Funktionen aus
    spielstand is für die ausgabe in der konsole zuständig und spielverlauf für die textdatei

    int rnd=1;     
        int r,z,g;
        int s;
        int who=0;
        int size=12;
        int *topf1 = NULL;
        int ebs;
    
    void spielverlauf(){
                FILE * spielverlauf;
                int n;
    
       spielverlauf = fopen ("spielverlauf.txt","a+t");
       fprintf(spielverlauf,"%d. Runde:\n",rnd);
       rnd++;
         for(z=0;z<size;++z ) fprintf(spielverlauf," ");
              fprintf(spielverlauf,"  1.\n\n");
              fprintf(spielverlauf,"     ");
              for(z=(size/2)-2;z>=0;z--){
    
                        fprintf(spielverlauf,"%d ", topf1[z]);
                        }
    
                        fprintf(spielverlauf,"\n");
              fprintf(spielverlauf,"%d", topf1[size/2]);
              for(z=0;z<size+7;++z ) fprintf(spielverlauf," ");
              fprintf(spielverlauf,"%d \n", topf1[size]);
              fprintf(spielverlauf,"     ");
              for(z=(size/2)+1;z<size;++z){
                        fprintf(spielverlauf,"%d ", topf1[z]);
                                       }
                      fprintf(spielverlauf,"\n\n");
                      fprintf(spielverlauf,"    1.\n");
    
       fclose (spielverlauf);
                }
    
         void spielstand(){
              for(z=0;z<size;++z ) printf(" ");
              printf("  1.\n\n");
              printf("     ");
              for(z=(size/2)-2;z>=0;z--){
    
                        printf("%d ", topf1[z]);
                        }
    
                        printf("\n");
              printf("%d", topf1[size/2]);
              for(z=0;z<size+7;++z ) printf(" ");
              printf("%d \n", topf1[size]);
              printf("     ");
              for(z=(size/2)+1;z<size;++z){
                        printf("%d ", topf1[z]);
                                       }
                      printf("\n\n");
                      printf("    1.\n");
    
              }
    

    wenn ich im programm nur spielstand() aufrufe läuft alles ganz normal wie erwartet, lasse ich nun aber gleichzeit bzw. direkt danach auch spielverlauf() aufrufen kommt in den letzten wert des arrays ne zahl wie 75834755465



  • Hat topf1 denn auch einen Speicherbereich auf den er zeigt?
    Wie groß ist der? z oder z+1 Elemente?



  • int main()
    {
                    topf1 = (int *) malloc(size *sizeof(int));
                    int tmp;
                    if(topf1 != NULL)
                    {
    
                        for(tmp=0; tmp<size; ++tmp){
                            topf1[tmp] = 5;
                            }}
                            topf1[size/2]=0;
                            topf1[size]=0;
    

    Hier gebe ich den Speicher für topf1 frei,
    die größe variiert, standardmßig 12, man kann ihn ändern wenn man möchte, aber das habe ich in diesem fall nicht getan



  • Hier gebe ich den Speicher für topf1 frei,

    😮 du meinst hoffentlich das Gegenteil.



  • ja, habs falsch ausgedrückt ^^, tschuldigung



  • topf1[size]=0;
    

    Das hier macht nicht das was du willst.



  • Der letzte Wert des Arrays soll immer 0 betragen, dann ist das doch richtig so.
    Oder mache ich gerade nen Denkfehler??
    mfg



  • topf[size-1] = 0;
    😉


Log in to reply