übung aus volkards c++ kurs



  • hallo zusammen, kann mir jmnd. sagen wieso ich keine Ausgabe bekomme?
    *rumtroll*
    ich blicks nich...

    #include<iostream>
    #include<string>
    #include<cstdlib>
    #include<ctime>
    using namespace std;
    void mischen(int kartendeck[4][13])
    
    {
       int farbe, zahl;
       for(int karte = 1; karte <=52; karte++)
       {
          do
          {
             farbe = rand() % 4;
             zahl = rand() % 13;
          }
          while(kartendeck[farbe][zahl] != 0);
          kartendeck[farbe][zahl] = karte;
       }
    }
    void austeilen(const int kartendeck[4][13],
                   const string farbe[4],
                   const string zahl[13])
    {
       for(int karte=1; karte<=52;karte++)
          for(int i=0;i<4;i++)
             for(int j=0;j<13;j++)
                if(kartendeck[4][13]==karte)
                   cout<< farbe[i] <<" "<<zahl[j]<<endl;
    
    }
    int main()
    {
       const string Farben[4] = { "Kreuz", "Pik", "Herz", "Karo" };
       const string Zahlen[13] = { "As", "Koenig", "Dame", "Bube", "Zehn",
          "Neun", "Acht", "Sieben", "Sechs",
          "Fuenf", "Vier", "Drei", "Zwei" };
       int Kartendeck[4][13] = { 0 };
       srand(time(0));
       mischen(Kartendeck);
       austeilen(Kartendeck, Farben, Zahlen);
    
       cout<<"Bitte druecken Sie Return. . .";
       getchar();
       return 0;
    }
    


  • Weil du in "mischen" in der do-while-Schleife solange durchläufst bist du per Zufall ein Element findest das nicht 0 ist. Aber du hast zuvor in der main alle mit 0 initialisiert und seitdem nicht mehr verändert => Endlosschleife



  • ouch.... danke^^



  • Nö, er läuft doch durch, SOLANGE das gefundene Element ungleich 0 ist ...

    Und ... bei mir erzeugt der Code eine Ausgabe - ohne Änderung.



  • Ah, stimmt, versehen. Liegt dann wohl eher an
    if(kartendeck[4][13]==karte)
    das sollte wo so aussehen:
    if(kartendeck[i][j]==karte)



  • Kann auch nicht sein ... wie gesagt, so wie der Code geschrieben ist, krieg ich auch eine Ausgabe, allerdings sind die Karten natürlich nicht gemischt, wegen der von Dir erwähnten Code-Stelle. Mit Deiner Änderung kommen die Karten dann auch (wie wohl gewünscht) gemischt heraus.



  • Da er mit if(kartendeck[4][13]==karte) außerhalb der Speichergrenzen herumwuselt, ist das Verhalten eh nicht bestimmt. Wer weiß was für Einstellungen etc. er hat, daß ihm das um die Ohren fliegt.


Anmelden zum Antworten