While-Schleife - Brauche dringend hilfe!!!



  • Ich habs auch mal mit 2while schleifen versucht,das klappte auch nicht!
    ALso mit der for schleife habe ich es so gelöst:

    int main(void)
    {
              int spalte=0;
              int zeile=0;
              int i,k;
    
              printf("Bitte geben sie die Spalte ein: ");
              scanf("%d", &spalte);
    
              printf("Bitte geben sie die Zeilen ein: ");
              scanf("%d", &zeile);
    
              for (i=1;i<=spalte;i=i+1){
    
                    for (k=1;k<=zeile;k=k+1)
                      printf("%3d", i*k);
                              }
    
                          return 0;
                     }
                  }
    

    Mit der for-schleife klappts ohne probleme,was muss ich den bei der while alles beachten?



  • Eigentlich nur das:

    Aus

    for ( a ; b ; c ) {
     /* d */
    }
    

    wird

    a;
    while (b) {
      /* d */
      c;
    }
    


  • aus:

    for (i=1;i<=spalte;i=i+1){
    
                    for (k=1;k<=zeile;k=k+1)
                      printf("%3d", i*k);
    

    wird

    while (i<spalte){
               i=i+1;
    
    while (k<zeile){
               k=k+1;
               printf("%3d", i*k);
    

    Jedoch bekomme ich nicht das selbe ergebnis?!!?Wo könnte den sonst der fehler liegen?



  • Eventuell vergessen i und k einen Startwert zu geben?



  • Du hast a (i=1 bzw k=1) nicht vor die Schleife gesetzt, und c (i=i+1 bzw k=k+1) muss ans Ende des Schleifenkörpers.

    Ist es wirklich so schwer ein Analogiebeispiel "nachzuspielen"? Du brauchst doch eigentlich nur in Deiner for-Schleife zu schauen was a, b, c und d sind (im Zweifel aufschreiben, deutlich genug getrennt sind sie durch die ";") und das dann in meine while-Vorlage einzufügen. Wenn Du das zuerst für die innere Schleife machst, kannst Du das komplette Ergebnis als "d" für die äussere Schleife nehmen.



  • Startwert habe ich ganz oben vergeben,also daran liegts nicht!

    Andere frage,welchen freeware prog würdet ihr für c empfehlen?Habe dev c++ und damit kommt mein pc nicht klar...



  • Also habs mal so verändert wie du es gemeint hast:

    int main(void)
    {
              int spalte=0;
              int zeile=0;
              int i=1;   // Startwert bzw a
              int k=1;   // Startwert bzw a
    
              printf("Bitte geben sie die Spalte ein: ");
              scanf("%d", &spalte);
    
              printf("Bitte geben sie die Zeilen ein: ");
              scanf("%d", &zeile);
    
              while (i<spalte){ //b
    
              while(k<zeile){  //b
                      printf("%3d\n", i*k); //d
                      k=k+1;   //c      
                      i=i+1;   //c  
                      }
                          return 0;
                     }
    

    Ich bekomme aber trotzdem nicht das gleiche Ergebnis wie bei der For-schleife...ich bin verzweifelt!!!



  • FAST richtig 😉

    Der Schleifenkörper der äusseren Schleife geht bis zum } der inneren Schleife. Du musst nur noch k=k+1 nach } zu notieren statt davor (ausserdem ist das return 0 noch im ersten Schleifenkörper statt nach beiden Schleifen, eine schliessende Klammer fehlt also):

    int main(void)
    {
              int spalte=0;
              int zeile=0;
              int i=1;   // Startwert bzw a
              int k=1;   // Startwert bzw a
    
              printf("Bitte geben sie die Spalte ein: ");
              scanf("%d", &spalte);
    
              printf("Bitte geben sie die Zeilen ein: ");
              scanf("%d", &zeile);
    
              while (i<spalte){ //b
    
                  /* Hier fängt "d" der äusseren Schleife an */
                  while(k<zeile){  //b
                      printf("%3d\n", i*k); //d
                      k=k+1;   //c      
                  }
                  /* Hier ist "d" der äusseren Schleife zuende */
    
                  i=i+1;   //c  
              }
    
              return 0;
    }
    


  • Man sollte schon noch ein k=1 o.ä. vor die innere Schleife schreiben, sonst wird sie nur einmal durchlaufen.



  • Und sowas geht mir durch 😞

    Klar, k=1 muss hinter den Kommentar "Hier fängt d ...." und nicht an den Programmanfang 😉



  • k=1;    //Statt am Programmanfang oder??
    i=1;
    while (i<spalte){ //b
    
                  /* Hier fängt "d" der äusseren Schleife an */
                  while(k<zeile){  //b
                      printf("%3d\n", i*k); //d
                      k=k+1;   //c      
                  }
                  /* Hier ist "d" der äusseren Schleife zuende */
    
                  i=i+1;   //c  
              }
    
              return 0;
    

    Habs versucht klappt leider immer noch nicht!



  • i=1; //Statt am Anfang
    while (i<spalte){ //b
    
                  /* Hier fängt "d" der äusseren Schleife an */
                  k=1; // //Statt am Anfang
                 while(k<zeile){  //b
                      printf("%3d\n", i*k); //d
                      k=k+1;   //c      
                  }
                  /* Hier ist "d" der äusseren Schleife zuende */
    
                  i=i+1;   //c  
              }
    
              return 0;
    

    KLappt immernoch nicht.. 😡


Anmelden zum Antworten