Ascii code tabelle ausgeben C



  • Nein, das hat mit Vertauschen nichts zu tun. Wie ich bereits mindestens 2 mal gesagt habe, musst du zeilenh gar nicht auf 0 überprüfen. Und ich wette, du kapierst immer noch nicht, was in der Schleife passiert. Vielleicht solltest du ja mal deinen Mittagsschlaf nachholen.

    P.S.: Raten hilft nur selten weiter...



  • Hello World schrieb:

    Das leben ist ein Programm

    Und über die API und das Betriebssystem ist man sich noch nicht im Klaren 😃



  • wenn ich die überprüfung auf zeilenh==0 weg lasse kommt ein komplettes Chaos raus



  • Hello World schrieb:

    wenn ich die überprüfung auf zeilenh==0 weg lasse kommt ein komplettes Chaos raus

    Du sollst die nicht weglassen sondern auf etwas anderes als 0 prüfen. Worauf wurde schon geschrieben.

    Und dann schau mal wie viel Zeichen (auch Leerzeichen) du ausgibst, wenn dein Zeichen >= 32 und wenn < 32 ist (Zeile 33 und 37).



  • So ein letztes mal ...

    #include <stdio.h>
    
    int main()
    {
        int sterne      =0,
            zahlenzeile =0,
            spalten     =0;
        float zeilenh   =0;
        int ascii       =0,
            anzahl      =0;
        printf("     *");
        for(zahlenzeile=0; zahlenzeile<=19;zahlenzeile++){
            if(zahlenzeile<=9 && zahlenzeile >0)
                printf("  %d", zahlenzeile);
            else
            printf(" %d", zahlenzeile);
        }
        printf("\n");
        for(sterne=0; sterne<=64; sterne++){
            printf("*");}
        printf("\n");
    
        for(spalten=0; spalten<=255; spalten++)
        {
            zeilenh=spalten%20;
            if(zeilenh == 0)
            {
                printf(" %3d *", spalten);
            }
            else if(zeilenh==19)
            {
                printf("\n");
            }
            ascii++;
                if(ascii >= 32 && anzahl <= 19)
                {
                    printf(" %c ", ascii);
                }
                else if(ascii < 32 && anzahl <= 19)
                {
                    printf(" ");
                }
        }
        return 0;
    }
    

    1. Benötige ich noch eine schleife? Wenn ja ... Wo mit welchen Variablen?
    2. Was Fehlt/ist zu viel/ist falsch bei den if else Verzweigungen
    3. Wo liegen sonnst noch Fehler

    BITTE



  • Das ist nicht dein Ernst, oder? Denk nach, dann wirst du auch auf eine Lösung kommen.

    EDIT: Kauf/Leih dir ein Buch, falls du noch keins hast.



  • Ich denke jetzt schon mind. 3 Stunden und komm nicht drauf !!! :(((((



  • Na gut, wenn du eine Anleitung brauchst:
    1. Gehe dein Programm durch und versuche mal für die Zahlen 0 bis 41, nachzuvollziehen, was in deinem Programm passiert und was passieren sollte.
    2. Lies dir alle Kommentare durch und erstelle dir eine Liste mit allen Fehlern, die genannt wurden.
    3. Gehe schrittweise durch und schaue nach, ob du die Fehler schon behoben hast.
    4. Nimm meinen Pseudocode und schreibe für jede Zeile den/die entsprechenden C-Befehle. Du kannst das allerdings nicht konkret einbauen, du musst noch einige kleinere Abänderungen vornehmen.
    5. Wenn du es noch nicht verstanden hast, schreibe dir einen Pseudocode und versuche selbst, ihn im Kopf schrittweise auszuführen und zu schauen, ob er das richtige Ergebnis liefert.
    6. Wenn er funktioniert, implementiere ihn.
    7. Wenn es immer noch nicht funktioniert, nimm den Debugger.
    8. Wenn es immer noch nicht funktioniert, stelle dir leichtere Aufgaben, die dich schrittweise an diese Aufgabe heranführen
    9. Wenn es immer noch nicht funktioniert, lies dir ein komplettes C-Buch durch.
    10. Wenn es immer noch nicht funktioniert, geh schlafen.



  • wxSkip schrieb:

    10. Wenn es immer noch nicht funktioniert, geh schlafen.

    😃



  • EOutOfResources schrieb:

    wxSkip schrieb:

    10. Wenn es immer noch nicht funktioniert, geh schlafen.

    😃

    😃 Wird er wohl erst spät ins Bett kommen, wenn er vorher noch ein C-Buch durchlesen muss^^



  • sO bin jetzt alles durchgegangen jetzt sind nur noch die ascii's plötzlich vertauscht -.- was ist jetzt falsch

    #include <stdio.h>
    
    int main()
    {
        int sterne      =0,
            zahlenzeile =0,
            spalten     =0;
        float zeilenh   =0;
        int ascii       =0,
            anzahl      =0;
        printf("     *");
        for(zahlenzeile=0; zahlenzeile<=19;zahlenzeile++){
            if(zahlenzeile<=9 && zahlenzeile >0)
                printf("  %d", zahlenzeile);
            else
            printf(" %d", zahlenzeile);
        }
        printf("\n");
        for(sterne=0; sterne<=64; sterne++){
            printf("*");}
        printf("\n");
    
        for(spalten=0; spalten<=255; spalten++)
        {
            zeilenh=spalten%20;
            if(zeilenh == 0)
            {
                printf(" %3d *", spalten);
            }
            else {
                ascii++;
                if(ascii >= 32 && anzahl <= 19)
                {
                    printf(" %c ", ascii);
                }
                else if(ascii < 32 && anzahl <= 19)
                {
                    printf("   ");
                }
            if(zeilenh == 19)
    
                printf("\n");
            }
    
        }
        return 0;
    }
    


  • Wofür ist denn jetzt anzahl wieder?

    Du weißt wofür "%3d" bei printf steht?
    Dann benutze es auch bei zahlenzeile.

    Achso: das ascii++ muss aus dem else zweig raus.
    Oder schreib gleich ascii = spalten.



  • Hello World schrieb:

    sO bin jetzt alles durchgegangen jetzt sind nur noch die ascii's plötzlich vertauscht -.- was ist jetzt falsch

    Ich glaub's ja nicht. Wie viele Punkte bist du durchgegangen? Einen halben?



  • Das steigt ja keiner mehr durch.

    #include <stdio.h>
    #include <ctype.h>  /* fuer isprint */
    
    #if 1      /* 1 fuer Dezimal, 0 fuer Hexadezimalzahlen */
      #define FRM ".1d"
    #else
      #define FRM ".2X"
    #endif
    
    int main()
    {
        int z, anz_spalten = 16;
        int von = 0, bis = 127;
    
        printf(" %3c *", '+');                        /* Spaltennummerierung */
        for(z = 0; z < anz_spalten ;z++)
          printf("%3"FRM, z);
        printf("\n");
    
        for(z = 0; z < (3*anz_spalten+6); z++)        /* Trennlinie */
          printf("*");
        printf("\n");
    
        for(z = von; z <= bis; z++)
        {
          if((z-von) % anz_spalten == 0)              /* erstes Zeichen in der Zeile ? */
            printf(" %3"FRM" *", z);                  /* Zeilennummern */
    
    //    printf("%3c", (z>=' ') ? z: ' ');           /* Zeichen */
          printf("%3c", isprint(z) ? z: ' ');         /* Besser da ASCII nur bis 127 geht */
    
          if((z-von) % anz_spalten == anz_spalten-1)  /* letztes Zeichen in der Zeile ? */
            printf("\n");                             /* Zeilenende */
    
        }
        return 0;
    }
    


  • wxSkip schrieb:

    Ich glaub's ja nicht. Wie viele Punkte bist du durchgegangen? Einen halben?

    😃 😃 😃
    Ich werf mich weg...



  • ASCII-Tabelle schrieb:

    Das steigt ja keiner mehr durch.

    Erstens das und zweitens entspricht das nicht den Voraussetzungen. (nur 16 statt 20 Spalten, nur bis 127)



  • wxSkip schrieb:

    Erstens das und zweitens entspricht das nicht den Voraussetzungen. (nur 16 statt 20 Spalten, nur bis 127)

    Naja, wenn der TO das im Quelltext anpasst, hat er ja noch was Eigenes gemacht. 🙂



  • DirkB schrieb:

    wxSkip schrieb:

    Erstens das und zweitens entspricht das nicht den Voraussetzungen. (nur 16 statt 20 Spalten, nur bis 127)

    Naja, wenn der TO das im Quelltext anpasst, hat er ja noch was Eigenes gemacht. 🙂

    Was sollen eigentlich die Defines?



  • SO nach langem übergehen meines Codes und das durchgehen euer Comment's hab ichs jetzt (hatte auch etwas Hilfe von einem Freund)

    #include <stdio.h>
    
    int main()
    {
        int sterne      =0, //Zählervariable für die Sternenreihe
            zahlenzeile =0, //Zählervariable für die Zahlenzeile
            zeilenh     =0, //Zählervariable für den Zeilenumbruch
            spalten     =0, //Zählervariable für die Spalten
            ascii       =0; //Zählervariable für die Ausgabe der
                            //ASCII-Codes
    
        printf("\nASCII-Code Tabelle\n\n");
    
        //Ausgabe der Zahlenzeile
        printf("     * ");
        for(zahlenzeile=0; zahlenzeile<=19;zahlenzeile++){
            if(zahlenzeile<=9 && zahlenzeile >0)
                printf("  %d", zahlenzeile);
            else
            printf(" %d", zahlenzeile);
        }
    
        printf("\n"); //Zeilenumbruch
        //Ausgabe der Sternenzeile
        for(sterne=0; sterne<=65; sterne++)
            printf("*");
    
        printf("\n"); //Zeilenumbruch
    
        //Ausgabe der ASCII-Codes
            for(spalten=0; spalten <= 255; spalten += 20)
            {
                printf(" %3d *", spalten); //Ausgabe Der Zeilennummern
                    for(zeilenh = 0; zeilenh < 20; zeilenh++)
                    {
                        //Berechnung der ASCII's
                        ascii = spalten + zeilenh;
                        //Ausgabe aller ASCII's über 32
                        if(ascii < 32 || ascii > 255)
                        {
                            printf("   ");
                        }
                        else
                        {
                            printf("%3c",ascii);
                        }
                    }
                printf("\n");
            }
        return 0;
    }
    


  • Nein, es stimmt immer noch nicht ganz... Vor der Spalte 0 ist eine Leerzeile zu viel.


Anmelden zum Antworten