erstes Programm und schon Probleme



  • Also,
    habe gestern Abend "C++ für dummies" (der Titel ist passend) und "video2brain- jetzt lerne ich c++" (2006) bekommen. Jetzt habe ich natürlich erst mal geguckt/gelesen und wollte eben mal was ernstes machen (ernst? naja).
    Das Programm soll eine Lotto Simulation sein.
    Erst gibt man 6 Zahlen ein,
    dann werden 6 Zufallszahlen erzeugt im Rahmen von 1-49.
    Hier ist das erste Problem...
    Ich weiß nämlich nicht wie ich es hinbekommen kann das man nur Zahlen von 1-49 eingeben kann.
    Nun gehts weiter...
    Nachdem man die Zahlen eingegeben hat, werden die ZUfallszahlen erzeugt.
    Jetzt wollte ich die Eingabe und die zufallsgenerierten Zahlen vergelichen.
    Ich weiß das es mit if möglich ist, aber eben nicht wie.
    Hier ist der Code (wenn ihr irgendetwas unpraktisches etc. seht könnt ihr es gerne erwähne).

    #include <iostream>                
    using namespace std;               
    
    int main()  
    
    { 
    int zahl1;
    int zahl2;
    int zahl3;
    int zahl4;
    int zahl5;
    int zahl6;
    
    cout << "Geben sie jetzt bitte 6 Zahlen ein auf die sie tippen." << endl;
    cin >> zahl1;
    cin >> zahl2;
    cin >> zahl3;
    cin >> zahl4;
    cin >> zahl5;
    cin >> zahl6;
    int schluss;
    
    srand (time(NULL));
    
    for (int x=1;x<=6;x++)
    {
      cout << rand()%49 << endl;
    }
    
    cout << "Ihre Tipps waren: " << zahl1 << ", " << zahl2 << ", " << zahl3 << ", " << zahl4 << ", " << zahl5 << " und " << zahl6 << endl;
    
    cout << "Um zu beenden druecken sie nun eine beliebige Taste und bestaetigen sie dies mit Enter";
    cin >> schluss; 
    
    return 0; 
    }
    

    Hoffe auf schnelle Hilfe...



  • Musst du halt per If Anweisung eingrenzen.



  • Ok, ich wuerde erstmal nen container verwenden statt 6 Variablen, aber fuers erste kanns auch so bleiben (wenn interesse mal std::vector suchen)

    dann noch das mit den random Zahlen, jetzt sind das Zahlen von 0 bis 48, also noch ein +1 dahinter.

    die Abfrage fuer eine Zahl wuerde wohl (einfach) so aussehen:

    int zahl1=0;
    while(zahl1<1 && zahl1>49)
        cin>>zahl1;
    


  • Ein Array würds in diesem Fall auch tun. Aber wenn wir schon dabei sind, dann sollte nicht % mit rand() verwendet werden sondern RAND_MAX. 🙂



  • int(rand()/(RAND_MAX + 1.0) * 49);
    

    ...

    #include <iostream>                
    
    const unsigned short tips = 6;
    
    int main(void)  
    {
        unsigned int nNumbers[tips];
        unsigned short nMatchs = 0;
        std::cout << "Geben Sie bitte " << tips << " Zahlen ein auf die sie tippen wollen!" << std::endl;
    
        for (unsigned short n = 0; n < tips; ++n)
        {
            std::cout << "Zahl " << (n + 1) << ": ";
            std::cin >> nNumbers[n];
        }
    
        std::cout << "Sie haben alle " << tips << " Zahlen angegeben. Folgende Zufallszahlen wurden generiert und folgende hatten Sie getippt:" << std::endl;    
    
        srand(time(NULL));
        for (unsigned short n = 0; n < tips; ++n)
        {
            unsigned int nRandome = int(rand()/(RAND_MAX + 1.0) * 49);
            std::cout << "\t- " << nRandome << " (" << nNumbers[n] << ")";
            if (nRandome == nNumbers[n])
            {
                ++nMatchs;
                std::cout << " - richtig!";
            }
            std::cout << std::endl;
        }
    
        std::cout << "Sie haben " << nMatchs << " Zahlen richtig getippt!" << std::endl;
        std::cout << "Um das Programm zu Beenden, druecken Sie nun bitte eine beliebige Taste und bestaetigen sie dies mit Enter";
        std::cin.getline();
    
        return 0;
    }
    

    so in etwa ... kann sein das ich mich vertippt hab ... hab nicht getestet .. und nur hier reingehauen 😉 :xmas1:

    [edit]aja ... hab es dir so gemacht, dass du halt festlegen kannst wie viele Zahlen man tippen darf (tips einfach nen anderen Wert zuweisen!)[/edit]



  • Was passiert wenn man mal keine Zahl eingibt? 😛

    const unsigned int max_numbers = 6;
    const unsigned int min_value   = 1;
    const unsigned int max_value   = 49;
    
    template< typename T >
    bool range( const T& value, const T& min, const T& max )
    {
    	return ( value >= min && value <= max );
    }
    
    int main()
    {
    	unsigned int numbers[ max_numbers ];
    	unsigned int index = 0;
    	unsigned int matches = 0;
    
    	do
    	{
    		std::cout << "Nummer " << index << ": ";
    		std::cin >> numbers[ index ];
    
    		if ( range( numbers[ index ], min_value, max_value ) && std::cin.good() )
    		{
    			++index;
    		}
    		else
    		{
    			std::cout << "\tFehlerhafte Eingabe" << std::endl;
    			std::cin.clear();
    			std::cin.ignore( std::cin.rdbuf()->in_avail() );
    		}
    	} while ( index < max_numbers );
    
    	srand( time( NULL ) );
    
    	for ( unsigned int i = 0; i < max_numbers; ++i )
    	{
    		unsigned int rnd = static_cast< unsigned int >( 1.0 + ( max_value * rand() ) / RAND_MAX );
    
    		std::cout << "Ihr Tipp: " << numbers[ i ] << " Lottozahl: " << rnd << std::endl;
    
    		if ( numbers[ i ] == rnd )
    			++matches;
    	}
    
    	if ( matches == max_numbers )
    		std::cout << "Sie haben gewonnen!" << std::endl;
    	else
    		std::cout << "Sie haben leider nicht gewonnen!" << std::endl;
    
    	std::cout << "\n\nUm zu beenden druecken sie nun eine beliebige Taste und bestaetigen sie dies mit Enter";
    
    	std::cin.clear();
    	std::cin.ignore( std::cin.rdbuf()->in_avail() );
    	std::cin.get();
    }
    

Anmelden zum Antworten