mehrere long int wert nacheinander in eine Datei schreiben



  • Hi hab folgendes Problem ich habe eine datei in die ich nacheinander mithilfe einer schleife long int werte eintragen möchte welche durch ein lerzeichen getrennt wird das ganze haut nur nicht ganz so hin wie ich es möchte.

    Hier mal der Code:

    void funktion(FILE *in){
    
       long int ch;
       .
       .
       .
    
                do {
    
                   // hier wird die variable ch erzeugt
                   // irgendwann wird das flag auf 1 gesetzt und die 
                   // schleife wird verlassen
    
                   // Schreiben in die Datei in, hier ist das problem 
                      fprintf(in, "%li ",ch);
    
                } while (flag == 1);
    


  • Hast du den Rückgabewert von fopen geprüft?

    in ist ein seltsamer Bezeichner für eine Datei in die man schreibt.



  • Die Datei ist auf jedenfall offen und wird auch beschrieben aber das Problem ist das sie nicht so beschrieben wird wie sie soll es steht dann nur eine zahl drinnen



  • Da sollte es doch keine Problem sein zur Demo hier ein komplettes Programm mit weniger als 50 Zeilen zu erstellen und hier zu zeigen, oder 😕
    Am besten mit präziser Beschreibung des Fehlers - Zeilennummer, was sagt der Compiler oder was ist anders als erwartet?

    MfG f.-th.



  • koni1988 schrieb:

    do {
                   // irgendwann wird das flag auf 1 gesetzt und die 
                   // schleife wird verlassen
                } while (flag == 1);
    

    Vielleicht solltest du dir nochmal anschauen, wie eine do-while-Schleife funktioniert.



  • Also ich kriegs grad nicht gebacken, hocke wahrscheinlich zu lange dran und stell mich grad zu dumm an.

    Hier mal der ganze relevante code:

    // hier der Programmausschnit Programmausschnitt wo die problemfunktion geöffnet wird
    
    .
    .
    .
    
                do {
                   // Entscheidungsvariable vordeffinieren 
                      flag = 0;
                   // Konsole leeren 
                      clearconsole();
                   // Abfrage wo der Klartext ist
                      printf("Geben sie bitte den Pfad, in dem sich der Cheffrierte Text befindet, an!\n\n");
                   // Eingabe von Nutzer
                      printf("> ");
                      scanf("%254[^\n]", &pfad);
                   // Ist die Datei vorhanden, Oeffnen der Datei zum lesen
                      in = fopen(pfad,"w");
                      if (in==NULL) {      // Datei nicht vorhanden
                         printf("Die Datei <%s> konnte nicht geoffnet werden!", pfad);
                         getchar();
                         flag = 1;
                      }
                   // Eingabepuffer loeschen
                        while (getchar() != '\n' && getchar() != EOF);
                } while (flag==1);
    
             // Aufruf der rsacoded() funktion
                rsacoded(publickey, in, out);
    
    .
    .
    .
    
    // Hier die Funktion welche die Probleme macht
    
    void rsacoded(publickey *publickey, FILE *in, FILE *out){
             // Variablendeffinition -belegung
                int flag = 0;        // Entscheidungsvariable
                int zs1, zs2;        // Zwischenspeicher fuer das einlesen des Klartextes
                long int k;          // Variable zur hinterlegung der zusammengelegten zs1 und zs2
                long int ch;         // Variable fuer den Cheffrierten text
                char c;              // Zwischenspeicher fuer char
    
             // Schleife zur abarbeitung der Verschluesselung
                do {
                   // Herauslesen von zwei zeichen aus der Klartext Datei
                      // erstes zeichen 
                         c = fgetc(out);
                         // Ist Datei ende erreicht
                            if (c != EOF){         // Nein
                               zs1 = c;
                               // zweites zeichen
                                  c = fgetc(out);
                               // ist Datei ende erreicht
                                  if (c != EOF){         // Nein
                                     zs2 = c;
                                  } else {
                                     zs2 = 32;           // Lerzeichen
                                     flag = 1;
                                  }
                            } else {
                              flag = 1;
                            }
    
                   // Zusammfuegen zu einen Long Int Wert
                      k = zs1*1000+zs2;
    
                   // Start der Codierung
                      ch = moduloexponentiation(k, publickey->s, publickey->k);
    
                   // Schreiben in die Datei in
                      fprintf(in, "%li ",ch);
    
                } while (flag == 1);
    
        }
    
    // Und hier die Funktion welche noch aufgerufen wird
    
    long int moduloexponentiation(long int b, long int e, long int n){
    
                // Variablendeffinition - belegung 
                  long int r = 1;
    
                // Lets go
                  while (e != 0){
                        if (e % 2 == 0) {  // gerade 
                           b = (b*b)%n;
                           e = e/2;
                        } else {           // ungerade 
                           e = e - 1;
                           r = (r*b)%n;
                        }
                  }
    
                  // Rueckgabewert
                    return r;
    
            }
    

    So schon mal danke für die zeit die sich jeder nimmt



  • Vielleicht solltest du dir nochmal anschauen, wie eine do-while-Schleife funktioniert.

    Tus einfach, es tut nicht weh.



  • Dir wurde weiter oben nahegelegt, die do...while-Schleife nochmal kurz an Deinem inneren Auge vorbeiziehen zu lassen...
    Tue Aktion a, solange Bedingung b erfüllt ist...
    Solange flag gleich 1 ist, soll die Schleife laufen, laut Deiner Anweisung.
    Du setzt flag == 1 bei einem Fehler, ansonsten bleibt flag 0. Deshalb wird die Schleife zur einfachen Anweisung und die Bedingung flag == 1 nicht erfüllt. Deshalb auch nur 1 Wert in der Datei...



  • oh nein wie peinlich so ein dummer fehler es tut so weh^^ ok danke an alle


Anmelden zum Antworten