Problem beim Lesen aus einer Datei und Ausgabe der Daten auf den Bildschirm - File Handling



  • Hallo,

    ich habe mit der Anweisung fprintf(...) und mit Hilfe einer for-Schleife die Zahlen 32 - 255 inkl. ASCII-Code direkt in eine Datei geschrieben wie folgt:

    ordnungszahl = 32;
    
       for (zeilenzahl = 1 ; zeilenzahl <= 14; zeilenzahl++)
       {
          for(ordnungszahl; ordnungszahl<=zeilenzahl * 16 + 31; ordnungszahl++)
    
          {
    
          fprintf(au_kan, "%4d", ordnungszahl);
    
          }
    
          fprintf(au_kan, "\n");
    
          ordnungszahl = ordnungszahl - 16;
    
          for(ordnungszahl; ordnungszahl<= zeilenzahl * 16 + 31; ordnungszahl++)
    
          {
    
           fprintf(au_kan, "%4c", ordnungszahl);
    
          }
    
          fprintf (au_kan, "\n\n");
       }   
    
       fclose (au_kan);
    

    Das hat auch super geklappt. Nun möchte ich diese Zahlen und Zeichen aus der Datei lesen und auf dem Bildschirm ausgeben. Da nicht der komplette Zahlen/Zeichensatz auf den Bildschirm passt, soll nach der Hälfte der Zahlen/Zeichen = Nr. 143 das Programm anhalten und auf einen Tastendruck warten. Ich habe das ganze so programmiert (ascii ist die Variable, die die Zeichen/Zahlen aufnehmen soll):

    ascii = fgetc(ei_kan);                               /* Dateiinhalt zeichenweise lesen  */
    
       while (ascii != EOF)                                /* bis EOF erkannt ist             */                               
       {                                                    
    
          fputc (ascii, stdout);                            /* Zeichen in den Ausgabekanal     */
          ascii = fgetc(ei_kan);                            /* Zeichen zeichenweise lesen      */
    
          if (ascii == 143)                                 /* Bei Zeichen "143"               */
          getch();                                          /* Lesevorgang anhalten            */
    
       }
    
       fclose (ei_kan);
    

    Das klappt auch alles wunderbar bis auf eine Sache: Das Programm hält bei Zahl 143 an gibt aber den ASCII-Code der Zahl 143 nicht aus. Das ganze sieht auf dem Bildschrim dann so aus:

    ...
    ...
    ...
    128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
     &   .   U   S  ...  #   %   [   *   +   ~   "   x   '   @
    

    Gebe ich als if-Anweisung

    if (ascii == 144)
    getch();
    

    ein, sieht die Bildschirmausgabe so aus:

    ...
    ...
    ...
    128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
     &   .   U   S  ...  #   %   [   *   +   ~   "   x   '   @ 
    
    144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
    

    Wie bekomme ich es hin, dass die Zahl 143 einschließlich des ASCII-Codes auf dem Bildschirm erscheint bevor das Programm dann anhält???? 😞



  • Vermutlich mit nem fflush(stdout) vor dem getc



  • probier mal
    if (ascii == 144) 🙂



  • versuchs mal so:

    ascii = fgetc(ei_kan);                                  /* Dateiinhalt zeichenweise lesen  */ 
    
        while (ascii != EOF)                                /* bis EOF erkannt ist             */                               
        {                                                     
    
           fputc (ascii, stdout);                           /* Zeichen in den Ausgabekanal     */ 
           if (ascii == 143) getch();                       /* Bei Zeichen "143"  Lesevorgang anhalten             */ 
    
           ascii = fgetc(ei_kan);                           /* Zeichen zeichenweise lesen      */ 
        } 
    
        fclose (ei_kan);
    


  • Pferdefreund schrieb:

    Vermutlich mit nem fflush(stdout) vor dem getc

    Vielen Dank, funktioniert leider nicht.



  • Logikbestie schrieb:

    probier mal
    if (ascii == 144) 🙂

    Vielen Dank, das habe ich ebenfalls probiert (siehe meine Problembeschreibung). Funktioniert auch nicht.



  • mcr schrieb:

    versuchs mal so:

    ascii = fgetc(ei_kan);                                  /* Dateiinhalt zeichenweise lesen  */ 
     
        while (ascii != EOF)                                /* bis EOF erkannt ist             */                               
        {                                                     
             
           fputc (ascii, stdout);                           /* Zeichen in den Ausgabekanal     */ 
           if (ascii == 143) getch();                       /* Bei Zeichen "143"  Lesevorgang anhalten             */ 
    
           ascii = fgetc(ei_kan);                           /* Zeichen zeichenweise lesen      */ 
        } 
         
        fclose (ei_kan);
    

    Juhuuuuuuu, perfekt, es funktioniert 🙂 DANKE, DANKE, DANKE! 🙂

    IK66


Anmelden zum Antworten