Nicht-druckbares Zeichen als Dezimalzahl ausgeben.



  • Huhu, ich bin ein Einsteiger im Programmieren. Deshalb hab ich einige Probleme mit einer Aufgabe die mir gestellt worden ist:

    Ich soll ein Programm schreiben, welches die Standardeingabe in die Standardausgabe kopiert, dabei aber jedes Zeichen welches kein druckbares Zeichen und kein „Whitespace“ ist, durch seine Dezimalzahl "A1A2A3" ersetzt (ASCII-Code oder?). Ich kann dafür die Testfunktionen isprint und isspace nutzen.

    Momentan habe ich folgenden Rumpf:

    int c;
    while ((c = getchar () ) != EOF ) {
    if (! isspace (c) && isprint (c))
    putchar (c);
    }
    

    Mein Ansatz ist jetzt, mit else weiter zu machen. Die nicht druckbaren Zeichen müssten ja durch If sozusagen "gefiltert" sein. Wie kann ich diese nun als Dezimalziffern ausgeben?



  • Mit printf und dem richtigen Formatspecifier.



  • DirkB schrieb:

    Mit printf und dem richtigen Formatspecifier.

    Danke, aber ich möchte sie eben in der Standardausgabe als solches Zeichen ausgeben lassen 😕



  • if(!isprint(c) && !isspace(c))
        printf("%d", c);
    


  • Ich würde das als Escapesequence machen.
    Erstmal reicht ja als \x oder als \Oktalzahl.



  • Vielleicht hab ich mich mit der Standardausgabe nicht richtig ausgedrückt. So wie ich das verstanden habe muss ich den Spaß mit putchar ausgeben - gibt es eine Möglichkeit dies so zu machen? Ich hab leider die passende Vorlesung/Übung verpasst da mal wieder ne Erkältungswelle umgeht. Desweiteren denke ich mein Rumpf ist falsch.

    mit

    # include <stdio.h>
    # include <ctype.h>
    main () 
    {
    int c;
    while ((c = getchar () ) != EOF ) {
    if (! isspace (c) && isprint (c))
    putchar (c);
    else
    	printf("Kann nicht angezeigt werden");
    }
    }
    

    Erhalte ich zwar für "CRTL+Space" Die Ausgabe "Kann nicht angezeigt werden" Aber auch für das Zeichen "a" bekomme ich eine Ausgabe "aKann nicht angezeigt werden"



  • Das Zeichen von der Entertaste ist auch ein Steuerzeichen ('\n').

    Wenn du printf nicht benutzen darfst, musst du die Umwandlung in Ziffern selber machen und diese Ziffern einzeln ausgeben.

    putchar (ziffer + '0');
    

    Die Umrechnung solltest du hinbekommen, das ist Thema Stellenwertsystem. (2. oder 3. Klasse)

    printf gibt auf stdout aus.
    Und ob du die Aufgabe richtig verstanden hast, kann ich nicht beurteilen. Ich kenn die Aufgabe nicht.


Log in to reply