ASCII-Code auf Drucker ausgeben



  • Hi,

    ich habe ein Programm geschrieben, das den Ascii-Code aus einer Datei liest und auf den Bildschirm und Drucker ausgibt.

    Die Bildschirmausgabe funktioniert ohne Fehler. Beim Drucken werden die ASCII-Zeichen um ein Zeichen nach rechts verschoben dargestellt (Die 0 steht nicht unter Ordnungszahl 48 sondern unter 49 usw.). Ich kann keinen Fehler im Programm finden.

    Woran liegt diese verschobene Ausgabe beim Drucken?

    Vielen Dank für Eure Hilfe.

    /************************************************************************/
    /* Ausgabe des Zeichensatzes einschlieálich der Ordnungszahlen /
    /* in eine Datei, auf den Bildschirm und auf den Drucker. /
    /
    **********************************************************************/

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

    int main(void)
    {
    FILE *ei_kan, *au_kan;
    int ordnungszahl, ascii, zeilenzahl;
    int i, j;

    /************************************************************************/
    /* Datei anlegen und Zeichensatz abspeichern /
    /
    ***********************************************************************/

    if((au_kan = fopen("TEXT.TXT","w")) == 0)
    {
    fputs("In die Datei konnte nicht geschrieben werden!\n", stderr);
    exit(1);
    }
    else
    {
    ordnungszahl = 32;
    ascii = 32;
    for (zeilenzahl = 1; zeilenzahl <= 14; zeilenzahl++)
    {
    for(i = 0; i <= 15; i++)
    {
    fprintf(au_kan, "%3d", ordnungszahl);
    ordnungszahl++;
    }
    fputs("\n", au_kan);
    for(i = 0; i <= 15; i++)
    {
    fputc(ascii, au_kan);
    ascii++;
    }
    fputs("\n", au_kan);
    }
    }

    fclose(au_kan);

    /************************************************************************/
    /* Lesen aus der Datei und ausgeben auf den Bildschirm. /
    /
    ***********************************************************************/

    if((ei_kan = fopen("TEXT.TXT", "r")) == 0)
    {
    fputs("Aus der Datei konnte nicht gelesen werden!\n", stderr);
    exit(1);
    }
    else
    {
    clrscr();
    printf("\n");

    for(zeilenzahl = 1; zeilenzahl <= 14; zeilenzahl++)
    {
    for(i = 0; i <= 15; i++)
    {
    fscanf(ei_kan, "%3d", &ordnungszahl);
    printf("%4d", ordnungszahl);
    }
    for(i = 0; i <= 16; i++)
    {
    ascii = fgetc(ei_kan);
    printf("%4c", ascii);
    }
    printf("\n\n");
    if (zeilenzahl == 7)
    {
    getch();
    clrscr();
    printf("\n");
    }
    }
    }

    fclose(ei_kan);

    /************************************************************************/
    /* Lesen aus der Datei und ausgeben auf den Drucker. /
    /
    ***********************************************************************/

    if((ei_kan = fopen("TEXT.TXT", "r")) == 0)
    {
    fputs("Aus der Datei konnte nicht gelesen werden!\n", stderr);
    exit(1);
    }
    else
    {

    for(zeilenzahl = 1; zeilenzahl <= 14; zeilenzahl++)
    {
    for(i = 0; i <= 15; i++)
    {
    fscanf(ei_kan, "%3d", &ordnungszahl);
    fprintf(stdprn, "%4d", ordnungszahl);
    }
    putc(13, stdprn);
    for(i = 0; i <= 16; i++)
    {
    ascii = fgetc(ei_kan);
    fprintf(stdprn, "%4c", ascii);
    }
    putc(10, stdprn);
    putc(13, stdprn);
    }
    }

    fclose(ei_kan);
    putc(12, stdprn);

    return(0);
    }
    /************************************************************************/



  • Bau Code-Tags ein oder keiner wird deinen Code freiwillig lesen.

    MfG SideWinder



  • Hi,

    Beim Drucken werden die ASCII-Zeichen um ein Zeichen nach rechts verschoben dargestellt (Die 0 steht nicht unter Ordnungszahl 48 sondern unter 49 usw.). Ich kann keinen Fehler im Programm finden.

    Woran liegt diese verschobene Ausgabe beim Drucken? Die Bildschirmausgabe funktioniert problemlos.

    Vielen Dank für Eure Hilfe.

    hier noch mal mein Code mit Code-Tags:

    /************************************************************************/ 
    /* Ausgabe des Zeichensatzes einschlieálich der Ordnungszahlen */ 
    /* in eine Datei, auf den Bildschirm und auf den Drucker. */ 
    /************************************************************************/ 
    
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <conio.h> 
    
    int main(void) 
    { 
    FILE *ei_kan, *au_kan; 
    int ordnungszahl, ascii, zeilenzahl; 
    int i, j; 
    
    /************************************************************************/ 
    /* Datei anlegen und Zeichensatz abspeichern */ 
    /************************************************************************/ 
    
    if((au_kan = fopen("TEXT.TXT","w")) == 0) 
    { 
    fputs("In die Datei konnte nicht geschrieben werden!\n", stderr); 
    exit(1); 
    } 
    else 
    { 
    ordnungszahl = 32; 
    ascii = 32; 
    for (zeilenzahl = 1; zeilenzahl <= 14; zeilenzahl++) 
    { 
    for(i = 0; i <= 15; i++) 
    { 
    fprintf(au_kan, "%3d", ordnungszahl); 
    ordnungszahl++; 
    } 
    fputs("\n", au_kan); 
    for(i = 0; i <= 15; i++) 
    { 
    fputc(ascii, au_kan); 
    ascii++; 
    } 
    fputs("\n", au_kan); 
    } 
    } 
    
    fclose(au_kan); 
    
    /************************************************************************/ 
    /* Lesen aus der Datei und ausgeben auf den Bildschirm. */ 
    /************************************************************************/ 
    
    if((ei_kan = fopen("TEXT.TXT", "r")) == 0) 
    { 
    fputs("Aus der Datei konnte nicht gelesen werden!\n", stderr); 
    exit(1); 
    } 
    else 
    { 
    clrscr(); 
    printf("\n"); 
    
    for(zeilenzahl = 1; zeilenzahl <= 14; zeilenzahl++) 
    { 
    for(i = 0; i <= 15; i++) 
    { 
    fscanf(ei_kan, "%3d", &ordnungszahl); 
    printf("%4d", ordnungszahl); 
    } 
    for(i = 0; i <= 16; i++) 
    { 
    ascii = fgetc(ei_kan); 
    printf("%4c", ascii); 
    } 
    printf("\n\n"); 
    if (zeilenzahl == 7) 
    { 
    getch(); 
    clrscr(); 
    printf("\n"); 
    } 
    } 
    } 
    
    fclose(ei_kan); 
    
    /************************************************************************/ 
    /* Lesen aus der Datei und ausgeben auf den Drucker. */ 
    /************************************************************************/ 
    
    if((ei_kan = fopen("TEXT.TXT", "r")) == 0) 
    { 
    fputs("Aus der Datei konnte nicht gelesen werden!\n", stderr); 
    exit(1); 
    } 
    else 
    { 
    
    for(zeilenzahl = 1; zeilenzahl <= 14; zeilenzahl++) 
    { 
    for(i = 0; i <= 15; i++) 
    { 
    fscanf(ei_kan, "%3d", &ordnungszahl); 
    fprintf(stdprn, "%4d", ordnungszahl); 
    } 
    putc(13, stdprn); 
    for(i = 0; i <= 16; i++) 
    { 
    ascii = fgetc(ei_kan); 
    fprintf(stdprn, "%4c", ascii); 
    } 
    putc(10, stdprn); 
    putc(13, stdprn); 
    } 
    } 
    
    fclose(ei_kan); 
    putc(12, stdprn); 
    
    return(0); 
    } 
    /************************************************************************/
    


  • Hi,

    ich habe das Programm mit dem Debugger bearbeitet.

    In dieser for-Schleife vermute ich den Fehler:

    for(i = 0; i <= 16; i++)  
    {  
    ascii = fgetc(ei_kan);  
    fprintf(stdprn, "%4c", ascii);  
    }
    

    Beim ersten Schleifendurchlauf erhält die Variable ascii den Wert 10 (Zeile ascii = fgetc(ei_kan)). Erst beim zweiten Durchlauf wird der richtige Wert 32 eingelesen.

    Wenn ich die vom Programm erzeugte Datei in einem Text-Editor öffne kann ich keine fehlerhafte Speicherung finden.

    Woher kommt der Wert 10 für ascii?

    Bei der Bildschirmausgabe passiert dasselbe. Es hat auf dem Bildschirm warscheinlich keine Auswirkung bei der Ausgabe der Zeichen.

    Vielen Dank für Eure Hilfe.


Anmelden zum Antworten