Buchstaben/Sonderzeichen verdoppeln in einer while Schleife



  • Hallo Zusammen,
    ich bin gerade am programmieren lernen und soll ein programm schreiben welches folgendes tut.

    Es soll ein Dreieck mit STernen (*) dargestellt werden. Eingabe ist immer die Höhe h. BSP.
    h=3
    *
    **
    ***

    h=4
    *
    **
    ***
    ****

    Wie schaffe ich es, dass sich der Stern an das h anpasst?

    Bisher siehst es bei mir so aus:

    int h, i=0;
        char stern=42;
        printf("Wie soll die Hoehe des Dreiecks sein?\n");
       scanf("%d", &h);
       while (i<h) {
       printf("%c\n", stern);
       i=i+1;}
    

    Das Ergbnis ist im Moment z.B. bei h=3
    *
    *
    *

    Danke!



  • Du gibst in der 1. Zeile 1 Stern aus.
    Du gibst in der 2. Zeile 2 Sterne aus.
    Du gibst in der 3. Zeile 3 Sterne aus.
    ...

    Ändere mal deine Zeile mit printf(..stern) in

    printf("%2d| %c\n", i, '*');
    

    Evtl. siehst du ja da einen Zusammenhang.

    Und packe deinen Code bitte in cpp-Tags: Code markieren und den C/C++ Button unter den 🙂 😃 😉 anklicken.



  • ok gemacht, jetzt spuckt er folgendes aus bei h=3

    0: *
    1: *
    2: *



  • Du schaffst es 3 Sterne untereinander auszugeben.
    Mit drei (oder 2) Sternen nebeneinander will das nicht klappen?



  • richtig



  • Dann lass doch mal das \n bei printf weg oder nimm

    putchar('*');
    


  • ja gut wenn ich das \n weglasse dann stehen bei h=4 **** Sterne in einer Reihe.
    Ich will aber bei h=4
    *
    **
    ***
    ****

    das putchar hatten wir noch nicht...



  • vfbf4n1893 schrieb:

    ja gut wenn ich das \n weglasse dann stehen bei h=4 **** Sterne in einer Reihe.
    Ich will aber bei h=4
    *
    **
    ***
    ****

    Du kannst in einer Schleife n Zeilen ausgeben.
    Du kannst in einer anderen Schleife n Zeichen nebeneinander ausgeben.

    Wenn man das jetzt kombiniert. Also da wo du die Zeile ausgegeben hast, jetzt deine Schleife mit den Zeichen nebeneinander reinbaust, könnte das klappen.
    Vielleich brauchst du für die zweite Schleifen einen anderen Schleifenzähler.

    vfbf4n1893 schrieb:

    das putchar hatten wir noch nicht...

    Selbstständiges lernen wird i.A. begrüßt.



  • also ich habs nun:

    int h, i, x;
        printf("Wie soll die Hoehe des Dreiecks sein?");
       scanf("%d", &h);
       for (i=1; i<=h; i=i+1) {
    
        for (x=1; x<=i; x=x+1)
        printf("*");
        printf("\n");
    
       }
    

    die frage nun, ich verstehe nicht so ganz, wieso es die sterne nun verdoppelt?

    kann mir das jemand erklären? es muss wohl an diesem printf \n liegen. weil ohne diese funktioniert es nicht.
    unter andernm auch wieso macht das programm mehrere sterne in der 2. schleife, jedoch immer nur 1 leerzeichen? wird nur das 1. printf wiederholt???



  • Mal richtig eingerückt:

    int h, i, x;
    
      printf("Wie soll die Hoehe des Dreiecks sein?");
      scanf("%d", &h);
    
      for (i=1; i<=h; i=i+1) {
        printf("%2d| ",i);  // zur Info, diese printf gehört zu for i
    
        for (x=1; x<=i; x=x+1)
          printf("*");  // diese printf (und nur dieses) gehört zu for x
    
        printf("\n");   // diese printf gehört wieder zu for i
    
      }
    

    An der (richtigen) Einrückungstiefe kannst du erkennen, welche Zeilen zu einer Einheit gehören.


Anmelden zum Antworten