Warum funktioniert main zufallsgenerator nicht so wie ich es will



  • Nexus schrieb:

    helferlein schrieb:

    goto ist auch böse, auch dann kann dir den stack zerschießen.

    Was noch schlimmer ist: Man verliert beim Einsatz von goto sehr schnell die Übersicht und weiss nicht mehr, was der Code tut. Grundsätzlich ist goto zu vermeiden, auch wenn es einige akzeptable Ausnahmefälle gibt.

    Richtig, die gibt es. Ich kann mich an genau einen Fall erinnern, bei dem ich sinnvoll ein goto angewendet habe (von AmigaBASIC-Programmen in Kindertagen reden wir jetzt mal nicht... 😉 ). Grundsätzlich ist es aber zu vermeiden, klar.



  • Vielen Dank für eure Ratschläge.
    Mit der Formatierung ... habe ich es noch nicht so raus.
    Ich programmiere erst seit ein paar Tagen



  • Funktioniert leider immer noch nicht
    Egal welches level ich waehle die zahl ist immer zwischen 1 un 1000 und nicht wie gewollt bei Level 1 zwischen 1 und 100 usw



  • Dann poste doch mal bitte den neuen / alten Quelltext,
    nur dieses Mal formatiert.
    Dann könnte sich den auch jemand anschauen und dir sagen wo der Fehler liegt.

    und verwende mal so etwas bei Schreiben des nächsten Beitrages, wo ein Quelltext drin vorkommt.
    (cpp)Dein Quelltext(/cpp)



  • _matze schrieb:

    Richtig, die gibt es. Ich kann mich an genau einen Fall erinnern, bei dem ich sinnvoll ein goto angewendet habe. Grundsätzlich ist es aber zu vermeiden, klar.

    Genau an einen einzigen Fall kann ich mich auch erinnern (fast 20 Jahre her - um ein rekursives Programm möglichst schnell zu beenden).

    Auch wenn es offtopic ist: mein liebster Befehl von allen Sprachen, die ich kenne:

    COBOL - alter

    http://home.swbell.net/mck9/cobol/style/alter.html

    If you ever encounter this form of pathology, proceed with extreme caution. You have found either a bizarre and subtle bug or a vicious marauding style of programming. Quite possibly both.

    LOL



  • EOP schrieb:

    COBOL - alter

    http://home.swbell.net/mck9/cobol/style/alter.html

    If you ever encounter this form of pathology, proceed with extreme caution. You have found either a bizarre and subtle bug or a vicious marauding style of programming. Quite possibly both.

    LOL

    Oh mein Gott.. Was muss man genommen haben, um so ein Sprachfeature einzubauen?! 🙄

    Das ist ja, als ob man in Spaghetthi-Code noch mal mit dem Messer reingeht und alles schön verstückelt..



  • Hier ist er bin leider noch nicht dazu gejommen goto rauszumachen

    #include<iostream>
    #include <stdlib.h>
    #include <ctime>
    
    using namespace std;
    
    int main();
    int main()
    {
    	srand(time(0));
    
    	int ZahlDesComputers;
    
    	unsigned IhreZahl;
    	cout<<"Druecke Enter um das Spiel zu Starten.\n";
    	cout<<"Waehle ein Level zwischen 1 und 10:\n";
    	unsigned Level;
    		cin>>Level;
    		if(Level==1)
    		{cout<<"Die Zahl ist zwischen 0 und 100.";
    			 ZahlDesComputers = 1+(rand() % 100 );
    
    		  loop1: cout<<"Geben sie ihren Tip ein:";
    		  cin>>IhreZahl;
    		  if (IhreZahl<ZahlDesComputers)
    		  {
    			  cout<<"Die gesuchte Zahl ist groesser.";
    		  goto loop;
    		  }
    		  if (IhreZahl>ZahlDesComputers)
    		  {
    			  cout<<"Die gesuchte Zahl ist kleiner.";
    		  goto loop1;
    		  }
    		  if (IhreZahl==ZahlDesComputers)
    			  cout<<"Richtig!Die gesuchte Zahl ist "<<ZahlDesComputers<<endl;}
    
    		else if(Level==2)
    		{cout<<"Die Zahl ist zwischen 0 und 200.";
    			 ZahlDesComputers = (rand() % 200 + 1);
    
    		  loop2: cout<<"Geben sie ihren Tip ein:";
    		  cin>>IhreZahl;
    		  if (IhreZahl<ZahlDesComputers)
    		  {
    			  cout<<"Die gesuchte Zahl ist groesser.";
    		  goto loop;
    		  }
    		  if (IhreZahl>ZahlDesComputers)
    		  {
    			  cout<<"Die gesuchte Zahl ist kleiner.";
    		  goto loop2;
    		  }
    		  if (IhreZahl==ZahlDesComputers)
    			  cout<<"Richtig!Die gesuchte Zahl ist "<<ZahlDesComputers<<endl;}
    
    		else if (Level==3)
    		{cout<<"Die Zahl ist zwischen 0 und 300.";
    		   ZahlDesComputers = (rand() % 300 + 1);
    
    		  loop3: cout<<"Geben sie ihren Tip ein:";
    		  cin>>IhreZahl;
    		  if (IhreZahl<ZahlDesComputers)
    		  {
    			  cout<<"Die gesuchte Zahl ist groesser.";
    		  goto loop3;
    		  }
    		  if (IhreZahl>ZahlDesComputers)
    		  {
    			  cout<<"Die gesuchte Zahl ist kleiner.";
    		  goto loop;
    		  }
    		  if (IhreZahl==ZahlDesComputers)
    			  cout<<"Richtig!Die gesuchte Zahl ist "<<ZahlDesComputers<<endl;}
    
    		else if (Level==4)
    		{cout<<"Die Zahl ist zwischen 0 und 400.";
    		   ZahlDesComputers = (rand() % 400 + 1);
    
    		loop4: cout<<"Geben sie ihren Tip ein:";
    		    cin>>IhreZahl;
    		    if (IhreZahl<ZahlDesComputers)
    		    {
    				cout<<"Die gesuchte Zahl ist groesser.";
    		    goto loop;
    			}
    		    if (IhreZahl>ZahlDesComputers)
    		    {
    				cout<<"Die gesuchte Zahl ist kleiner.";
    		    goto loop4;
    			}
    		    if (IhreZahl==ZahlDesComputers)
    				cout<<"Richtig!Die gesuchte Zahl ist "<<ZahlDesComputers<<endl;}
    
    		else if(Level==5)
    		{cout<<"Die Zahl ist zwischen 0 und 500.";
    		   ZahlDesComputers = (rand() % 500 + 1);
    
    		loop5: cout<<"Geben sie ihren Tip ein:";
    		    cin>>IhreZahl;
    		    if (IhreZahl<ZahlDesComputers)
    		    {
    				cout<<"Die gesuchte Zahl ist groesser.";
    		    goto loop;
    			}
    		    if (IhreZahl>ZahlDesComputers)
    		    {
    				cout<<"Die gesuchte Zahl ist kleiner.";
    		    goto loop5;
    			}
    		    if (IhreZahl==ZahlDesComputers)
    				cout<<"Richtig!Die gesuchte Zahl ist "<<ZahlDesComputers<<endl;}
    
    		else if (Level==6)
    		{cout<<"Die Zahl ist zwischen 0 und 600.";
    		   ZahlDesComputers = (rand() % 600 + 1);
    
    		loop6: cout<<"Geben sie ihren Tip ein:";
    		    cin>>IhreZahl;
    		    if (IhreZahl<ZahlDesComputers)
    		    {
    				cout<<"Die gesuchte Zahl ist groesser.";
    		    goto loop;
    			}
    		    if (IhreZahl>ZahlDesComputers)
    		    {
    				cout<<"Die gesuchte Zahl ist kleiner.";
    		    goto loop6;
    			}
    		    if (IhreZahl==ZahlDesComputers)
    				cout<<"Richtig!Die gesuchte Zahl ist "<<ZahlDesComputers<<endl;}
    
    		else if (Level==7)
    		{ cout<<"Die Zahl ist zwischen 0 und 700.";
    		   ZahlDesComputers = (rand() % 700 + 1);
    
    		loop7: cout<<"Geben sie ihren Tip ein:";
    		    cin>>IhreZahl;
    		    if (IhreZahl<ZahlDesComputers)
    		    {
    				cout<<"Die gesuchte Zahl ist groesser.";
    		    goto loop;
    			}
    		    if (IhreZahl>ZahlDesComputers)
    		    {
    				cout<<"Die gesuchte Zahl ist kleiner.";
    		    goto loop7;
    			}
    		    if (IhreZahl==ZahlDesComputers)
    				cout<<"Richtig!Die gesuchte Zahl ist "<<ZahlDesComputers<<endl;}
    
    		else if (Level==8)
    		{ cout<<"Die Zahl ist zwischen 0 und 800.";
    		   ZahlDesComputers = (rand() % 800 + 1);
    
    		loop8: cout<<"Geben sie ihren Tip ein:";
    		    cin>>IhreZahl;
    		    if (IhreZahl<ZahlDesComputers)
    		    {
    				cout<<"Die gesuchte Zahl ist groesser.";
    		    goto loop;
    			}
    		    if (IhreZahl>ZahlDesComputers)
    		    {cout<<"Die gesuchte Zahl ist kleiner.";
    		    goto loop8;}
    		    if (IhreZahl==ZahlDesComputers)
    				cout<<"Richtig!Die gesuchte Zahl ist "<<ZahlDesComputers<<endl;}
    
    		else if (Level==9)
    		{cout<<"Die Zahl ist zwischen 0 und 900.";
    		   ZahlDesComputers = (rand() % 900 + 1);
    
    		loop9: cout<<"Geben sie ihren Tip ein:";
    		    cin>>IhreZahl;
    		    if (IhreZahl<ZahlDesComputers)
    		    {cout<<"Die gesuchte Zahl ist groesser.";
    		    goto loop;}
    		    if (IhreZahl>ZahlDesComputers)
    		    {cout<<"Die gesuchte Zahl ist kleiner.";
    		    goto loop9;}
    		    if (IhreZahl==ZahlDesComputers)
    				cout<<"Richtig!Die gesuchte Zahl ist "<<ZahlDesComputers<<endl;}
    
    		else if (Level==10)
    		{cout<<"Die Zahl ist zwischen 0 und 1000.";
    		   ZahlDesComputers = (rand() % 1000 + 1);
    		loop10: cout<<"Geben sie ihren Tip ein:";
    		    cin>>IhreZahl;
    		    if (IhreZahl<ZahlDesComputers)
    		    {cout<<"Die gesuchte Zahl ist groesser.";
    		    goto loop;}
    		    if (IhreZahl>ZahlDesComputers)
    		    {cout<<"Die gesuchte Zahl ist kleiner.";
    		    goto loop10;}
    		    if (IhreZahl==ZahlDesComputers)
    				cout<<"Richtig!Die gesuchte Zahl ist "<<ZahlDesComputers<<endl;}
    
    }
    


  • Eine normale Schleife und dann halt mit switch/case, if/else arbeiten..

    Und nimm doch da mal die Vorwärtsdeklaration der main raus..



  • Damit du mal siehst, auf wieviele Zeilen man das Ganze ganz leicht reduzieren kann, indem man z.B. Schleifen einsetzt und ein wenig rechnet, statt endloser if-Abfragen (=>Level):

    #include <iostream> 
    #include <stdlib.h> 
    #include <ctime> 
    
    int main() { 
      srand(time(0)); 
      unsigned int ZahlDesComputers; 
      unsigned int IhreZahl; 
      std::cout<<"Waehle ein Level zwischen 1 und 10:\n"; 
      unsigned int Level; 
      std::cin >> Level; 
      ZahlDesComputers = (rand() % (Level*100) + 1);
      do {
        std::cout << "Dein Tipp: ";
        std::cin >> IhreZahl;
        if(IhreZahl>ZahlDesComputers) {
          std::cout << "Gesuchte Zahl ist kleiner.\n";
        }
        if(IhreZahl<ZahlDesComputers) {
          std::cout << "Gesuchte Zahl ist groesser.\n";
        }
      }while(IhreZahl!=ZahlDesComputers);
      std::cout << "Richtig! Die gesuchte Zahl ist " << ZahlDesComputers << std::endl;
      getchar();
      getchar();
    }
    


  • Vielen Dank _matze
    dein code hat mir weiter geholfen
    was bedeutet

    getchar();
    

    ich wüsste jedoch trotzdem gerne warum es mit meinem code nicht funktioniert hat



  • Mxx1 schrieb:

    Vielen Dank _matze
    dein code hat mir weiter geholfen

    Kein Thema.

    Mxx1 schrieb:

    was bedeutet

    getchar();
    

    Die Funktion liest ein Zeichen (char) von stdin ein. Man nimmt die, wie in dem Fall, gerne am Ende einer Konsolenanwendung, um unter Windows das Schließen des Konsolenfensters beim Beenden des Programms zu verhindern, so dass man noch die letzte Ausgabe sieht.

    Doku: http://msdn.microsoft.com/de-de/library/x198c66c(VS.80).aspx

    Wenn du nicht weißt, was eine Funktion macht: immer in die Doku schauen! Da stehts!

    Mxx1 schrieb:

    ich wüsste jedoch trotzdem gerne warum es mit meinem code nicht funktioniert hat

    Kann ich dir auf Anhieb auch nicht sagen. Und ich habe ehrlich gesagt wenig Lust, mich da durchzuwühlen, sorry 🙂 . Aber ein Tipp: gehe schrittweise mit dem Debugger durch (im Visual Studio F10 und F11), dann kommst du sicher ganz schnell auf den Fehler. Der Debugger ist immer das Mittel überhaupt, um Fehler zu finden (Anfänger ignorieren das gerne), dafür ist er ja schließlich da. 😉



  • main zufallsgenerator

    👍



  • da main schrieb:

    main zufallsgenerator

    👍

    Ja, definitiv der Vertipper des Tages! Einen main-Zufallsgenerator hätte ich auch gerne! Ob der dann standard-konform generiert? Oder kommt dann auch mal ein void main() raus? 😃



  • drakon schrieb:

    Oh mein Gott.. Was muss man genommen haben, um so ein Sprachfeature einzubauen?! 🙄

    Das ist ja, als ob man in Spaghetthi-Code noch mal mit dem Messer reingeht und alles schön verstückelt..

    Als ich irgendwann in den 80ern programmieren gelernt habe, habe ich meinen damaligen Lehrer gefragt, ob denn wenigstens "alter" erlaubt wäre, wenn schon "goto" verboten ist.

    Wir mussten ihn daraufhin fast reanimieren. 😉



  • drakon schrieb:

    Oh mein Gott.. Was muss man genommen haben, um so ein Sprachfeature einzubauen?! 🙄

    Das ist ja, als ob man in Spaghetthi-Code noch mal mit dem Messer reingeht und alles schön verstückelt..

    Netter Vergleich. 😉

    Du solltest dir mal das COMEFROM-Statement ansehen, das ist sozusagen die Umkehrung des GOTOs. 😃

    EOP schrieb:

    Wir mussten ihn daraufhin fast reanimieren. 😉

    Hehe. 🙂



  • Ich bin ja der Meinung wir brauchen nen angepinnten Thread wo wir jegliche Verschreiber und andere Auswüchse die hier in der Zeit auftauchen/aufgetaucht sind sammeln :p



  • Firefighter schrieb:

    Ich bin ja der Meinung wir brauchen nen angepinnten Thread wo wir jegliche Verschreiber und andere Auswüchse die hier in der Zeit auftauchen/aufgetaucht sind sammeln :p

    Auf jeden Fall!

    Dann wäre das hier auch ein guter Kandidat (Post Nr. 3):

    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1657071.html

    😃



  • OMG 😃 Eventuell erklärt sich ja ein Moderator bereit so einen Thread aufzumachen? shade oder volkard?oder wer auch immer gerade da ist, könnte man das eventuell einrichten?


Anmelden zum Antworten