Problem mit for schleife



  • Hi ich habe mal eine frage zu meinen Code weil irgendwas stimmt da nicht ganz^^

    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <stdlib.h>
    #include <ctime>
    using namespace std;
    
    int main()
    {
    	long zahl, i;
    	time_t sek;
    	cout << "\nRaten Sie eine Zahl zwischen 1 - 15!\n";
    	time( &sek);
    	srand( (unsigned)sek );
    	zahl = (rand()%15)+1;
    	for(i=1; i==3; i++);
    	{
    		cin >> zahl;
    		if (zahl==sek)
    		{
    			cout << "Richtiiiig!!! :D\n";
    		}
    		if (zahl < sek)
    		{
    			cout << "Ihre Zahl ist zu klein, geben sie eine Neue ein!\n";
    		}
    		if (zahl > sek)
    		{
    			cout << "Ihre´Zahl ist zu groß, geben sie eine Neue ein!\n";
    		}
    	}
    }
    

    ich dachte mir das so das halt so das 3 mal die for schleife durchlaufen wird und dann jedesmal die if Strukturen gefragt werden.
    Aber irgendwie zeigt er mir dann immer die zahl ist zu klein an auch wenn ich 15 eingebe!

    Ich hoffe irgendjemand kann mir sagen wie ich es besser machen kann^^

    P.S. in meinem Buch wird die Sache mit einer while Scheife gemacht, geht das denn überhaupt mit einer for Schleife?

    Lg



  • Mach bei

    for(i=1; i==3; i++);

    mal das ; weg und aus i==3 mach i <= 3

    Und du erstellst eine Zufallszahl und speicherst die in zahl und überschreibst das dann gleich wieder mit der Eingabe und vergleist das mit den Sekunden seit 1970. Klar das es kleiner ist.



  • guude,

    ist hier eine while schleife nicht besser geeignet, wenn du 3 mal fragen willst?

    gruesse,
    buk



  • #include <stdlib.h> => #include <stdlib>
    #include <iomanip> => brauchst du nicht?!

    so was hier ist in C++ nicht üblich:

    long zahl, i;
    time_t sek;
    

    man deklariert variablen genau dann, wenn man sie braucht - und meist kann man sie dann gleich (sinnvoll) initialisieren...

    srand( (unsigned)sek ); => schreib besser unsigned int und mach nen C++ - Cast draus => srand( static_cast <unsigned int> (sek) );

    und hier hast du gleich mehrere fehler drin:
    for(i=1; i==3; i++); =>

    for (unsigned int i = 1; i != 3; i++)/*kein semikolon!*/
          /*muss jz nat. erst noch deklariert werden*/
                              /*hier darf _nicht_ die abbruchbedingung stehen - dort sollte stehen, wie lange die schleife ausgeführt werden sollte*/
    

    das semikolon würde bewirken, dass die forschleife als einzelner befehl interpretiert wird - und keinen schleifenkörper besitzt - es wird also einfach nur (sehr wenig ^^) rechenzeit verbraten...

    zu deiner ausgabe:
    wie wärs mit:
    std::cout << "XYZ" << std::endl

    noch mal zu der for-schleife
    die ist natürlich allg. ein wenig doof hier - warum sollte der user immer 3 mal raten müssen und warum darf er dann nicht weitermachen?

    bb

    PS: [code]-tags sind zwar schöner, aber [cpp]-Tags wäre der Oberhammer ; )

    edit:
    @zu langsam - aber dafür ausführlicher 🙂

    @buk: Hast du dir deinen Post mal durchgelesen? Ich würde ja mal ganz stark zu Nein tendieren...



  • @Fellhuhn: Ich bin aber auch Depp! :p Das mit "zahl" hab ich gar nicht gesehen^^

    @Buk: Hmmm ja^^ Aber ich bin irgendwie nicht drauf gekommen, hatte wohl mal wieder einen meiner weniger Hellen Momente. Ich werde das dann aber auch noch als while Schleife machen, wegen der Übung 😉 ^^

    werds jetzt mal überarbeiten ^^
    THX

    Lg



  • So also das Programm funktioniert jetzt mit der For Schleife 😃
    (Also zu mindestens grob^^)

    #include <iostream>
    #include <string>
    #include <stdlib.h>/* Wenn ich das .h wegmache kommt bei mir eine Fehler Medldung*/
    #include <ctime>
    using namespace std;
    
    int main()
    {
    	time_t sek;
    	cout << "\nRaten Sie eine Zahl zwischen 1 - 15!\n";
    	time( &sek);
    	srand( static_cast <unsigned int> (sek) );
    	long zahl;
    	zahl = (rand()%15)+1;
    	for(unsigned i = 0; i!=15; i++)
    	{
    		int zahl1;
    		cin >> zahl1;
    		if (zahl1==zahl)
    		{
    			cout << "Richtiiiig!!! :D\n";
    		}
    		if (zahl1 < zahl)
    		{
    			cout << "Ihre Zahl ist zu klein, geben sie eine Neue ein!\n";
    		}
    		if (zahl1 > zahl)
    		{
    			cout << "Ihre´Zahl ist zu gros, geben sie eine Neue ein!\n";
    		}
    	}
    }
    

    So danke für alles und an alle 😃

    P.S. @ unskilled: Ich hoffe ich habe das mit den Variablen so gemacht wie du dis meintest^^



  • huch - hab nen c vergessen gehabt...
    => #include <cstdlib>

    was fällt dir hier auf:

    long zahl;
        zahl = (rand()%15)+1;
    

    => const long zahl = rand()%15 + 1;

    und dann hast du noch immer das problem, dass der user auch, wenn er die zahl bereits erraten hat, noch weiterraten muss, wenn er sie nicht zufällig erst beim 15. anlauf herausbekommen hat ^^ (kannst ja ma versuchen, nen break; so unterzubringen, dass es stimmt!?)

    for(unsigned i = 0; i!=15; i++)
    

    natürlich geht so was, aber ich finds ne unart, das int wegzulassen - zu mal es ja echt nur 4 zeichen zusätzlich sind (also mit dem leerzeichen ^^)

    bb


Anmelden zum Antworten