Umwandlungszeichen und Tabellenform



  • moin moin,

    ich stecke in den C-Kinderschuhen..Habe aber hier schon ein Programm, welches mir, wie gewünscht, das kleine Einmaleins ausgibt. Allerdings vertehe ich das mit dem Umwandlungszeichen (%4d) nicht. Laut Buch usw. ist doch %d die Umwandlung in eine Dezimalzahl. Was macvht die 4, bzw. der gesamte Ausdruck da? Und: wie könnte ich es ändern, damit ich die Ausgabe noch in weitere Segmente (z.B. ein Tabellenquadrat pro 1x1 - 1x10 / 2x1 - 2x10 usw.) unterteilen kann? z.B. durch | getrennt.

    Hier der Code

    #include<stdio>
    
    int main(){
    
      int i,j;
    
      printf("\n **************Kleines Einmaleins**************\n);
    
     for(i=1;i<=10;i++){
       printf("\n");
     for(j=1;j<=10;j++){
       printf("%4d", i*j);
     }
     }
     printf("**************Kleines Einmaleins***************");
       return 0;
    }/*main*/
    

    Und die Ausgabe

    *************Kleines Einmaleins**********

    1 2 3 4 5 6 7 8 9 10
    2 4 6 8 10 12 14 16 18 20
    3 6 9 12 15 18 21 24 27 30
    4 8 12 16 20 24 28 32 36 40
    5 10 15 20 25 30 35 40 45 50
    6 12 18 24 30 36 42 48 54 60
    7 14 21 28 35 42 49 56 63 70
    8 16 24 32 40 48 56 64 72 80
    9 18 27 36 45 54 63 72 81 90
    10 20 30 40 50 60 70 80 90 100

    *********Kleines Einmaleins*************

    Also..die Textformatierung versteh ich halt nicht richtig.
    Wär schön, wenn's jemand erklären könnte, Dankeschön..

    Janni



  • Unter folgendem Link findest du eine Erklärung, was der Formatstring bedeutet:
    http://www.cplusplus.com/ref/cstdio/fprintf.html



  • Ich habe mir den Thread mal unter Beobachtung gestellt, weil ich eigentlich dasselbe Problem habe. Die Beschreibung hilft mir da auch nicht viel weiter.

    Sollte die Anweisung

    printf("%4d", i*j);
    

    nicht eigentlich dafür sorgen, dass alle Zahlen vierstellig mit führenden Leerzeichen ausgegeben werden?



  • Danke erstmal für den Link. Die Erklärung hatte ich auch gefunden und es steht ja auch ähnlich in meinem Buch. Nur leider "verstehe" ich die funktionsweise anhand dieser Beschreibungen nicht recht. Wie gesagt, ich komme z.B. nicht darauf, wie ich die Formatierung ändern müsste, um z.B. eine Tabellenform mit Zwischenstrichen daraus erstellen könnte. Vielleicht kann es noch jmd. erklären? Ansonsten probier ich natürlich trotzdem weiter "rum" und sehe, ob sich daraus eine selsbtst. Erklärung ergibt 🙄



  • zwischenstrich geht per
    printf(" | ");

    🙂

    du musst dir nur noch die passenden stellen suchen, wo du den strich einfügst.
    %4d sagt ja nur, wie %d dargestellt werden soll. mit trennzeichen hat das nichts zu tun.



  • Hallo nochmal,
    ok, danke so far, das mit dem printf (%Feldbreite.Genauigkeit) habe ich jetzt verstanden. Allerdings komme ich trotzdem nicht darauf, wie ich Folgendes ändern kann:

    /*Einmaleins Tabellenform*/
    
    #include<stdio.h>
    int main(){
    
    int i, j;
    
    printf(“\n-----Einmaleins:-----\n“);
    
    for(i=1;i<=10;i++){
    
        printf(“\n___________________\n“);
    
     for(j=1;j<=10;j++){
           printf(“%2d * %2d = %3d | \n“, j, i, i*j);
     }/*for2*/
    printf(“\n“);
    
    }/*for1*/
    
    }/*main*/
    

    Die Ausgabe sieht jetzt ja so aus:
    -----Das kleine Einmaleins-----
    ___________
    1 * 1 = 1 |
    2 * 1 = 2 |
    3 * 1 = 3 |
    4 * 1 = 4 |
    5 * 1 = 5 |
    6 * 1 = 6 |
    7 * 1 = 7 |
    8 * 1 = 8 |
    9 * 1 = 9 |
    10 * 1 = 10 |
    ___________
    1 * 2 = 2 |
    2 * 2 = 4 |
    3 * 2 = 6 |
    4 * 2 = 8 |
    5 * 2 = 10 |
    6 * 2 = 12 |
    7 * 2 = 14 |
    8 * 2 = 16 |
    9 * 2 = 18 |
    10 * 2 = 20 |
    ___________
    .....
    .....
    An sich ist das in Ordnung, aber ich möchte, dass es so aussieht:

    ___________
    1 * 1 = 1 | 1 * 2 = 2
    2 * 1 = 2 | 2 * 2 = 4
    3 * 1 = 3 | 3 * 2 = 6
    4 * 1 = 4 | 4 * 2 = 8
    5 * 1 = 5 | 5 * 2 = 10
    6 * 1 = 6 | 6 * 2 = 12
    7 * 1 = 7 | 7 * 2 = 14
    8 * 1 = 8 | 8 * 2 = 16
    9 * 1 = 9 | 9 * 2 = 18
    10 * 1 = 10 | 10 * 2 = 20
    ___________
    1 * 3 = 3 | 1 * 4 = 4
    2 * 3 = 6 | 2 * 4 = 8
    3 * 3 = 9 | 3 * 4 = 12
    4 * 3 = 12 | 4 * 4 = 16
    5 * 3 = 15 | 5 * 4 = 10
    6 * 3 = 18 | 6 * 4 = 24
    7 * 3 = 21 | 7 * 4 = 28
    8 * 3 = 24 | 8 * 4 = 32
    9 * 3 = 27 | 9 * 4 = 36
    10 * 3 = 30 | 10 * 4 = 40 .....

    Also, ich "ahne", dass ich in der 2. for-schleife die Ausgabe ändern muss, damit die Ausgabe von
    1 * 1 = 1 | 1 * 2 = 2 zeilenweise geschieht und danach vielleicht mit einer if-Abfrage ein \n Zeilensprung gemacht werden muss. Aber wie genau das klappt, vor allem wie es dann nach j=10 unten weiter geht..Habe ienfach keinen Einfall. Es wärte toll, wenn jemand doch noch mal einen Vorschlag hat.
    Danke euch im Voraus.

    Grüße*J



  • ok, manchmal hilft ein glas rotwein und kurz "denken" 🙄 hab's dann endlich hinbekommen. danke trotzdem!
    grüße*J


Anmelden zum Antworten