Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Falsche Schleife? + falscher zufall?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.10.2007, 15:59 Uhr
opiWahn



Ich hab dieses Programm geschrieben.
Aber ich hab drei Probleme:
1. immer wenn ich die zahl richtig tippe, kommt unendlich oft der "Glückwunsch" Satz.
2. Ich hab nen Zufall eingebaut. Aber er sucht sich immer 50,5 aus.
3. Geht das auch nur mit geraden Zahlen?


C++:
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main(int argc, char *argv[])
{
    cout<<"(c)2007 by opiWahn."<<endl;
    cout<<"Es wird nach einer Zahl gesucht. Finde sie heraus."<<endl;
    while(true)
    {
    int min = 1;
    int max = 50;          
    int zahl;
    zahl = min + rand()%(max-min+1);
    int ein;
    
    cin>>ein;
    cout<<ein<<" hast du eingegeben."<<endl;
    if(ein<zahl)
    {
              cout<<"Die Zahl "<<ein<<" ist kleiner als die gesuchte Zahl."<<endl;
              
    }
    else if(ein>zahl)
    {    
         cout<<"Die Zahl "<<ein<<" ist groesser als die gesuchte Zahl."<<endl;
         }
        
        
         else if(ein==zahl)
         {
              cout<<"Volltreffer! Herzlichen Glueckwunsch."<<endl;
            
         }

         }
              
         cout<<""<<endl;
         cout<<""<<endl;
         cout<<""<<endl;
        
    system("PAUSE");
    return EXIT_SUCCESS;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.10.2007, 16:16 Uhr
öni



Ich kann dir vielleicht nicht sagen wieso aber bei mir kommt da der absolute blödsinn raus wenn ich das kompilere. Wobei ich mich frage wie du es schaffst die zahl zu erraten die sich ja jedes mal ändert? Denn nach jeden Schleifen beginn lässt du ja eine neue Zufallszahl generieren.

So ich hab deinen Code mal ein wenig geändert und leserlicher gemacht und siehe da bei mir funktioniert es soweit. Und bei mir sind alle Zahlen gerade...und auch ungleich 50.5


C++:
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    cout<<"(c)2007 by opiWahn."<<endl;
    cout<<"Es wird nach einer Zahl gesucht. Finde sie heraus."<<endl;

    int min = 1;
    int max = 50;          
    int zahl;
    zahl = min + rand()%(max-min+1);
    int ein;

    while(true)
    {  
    
    cin>>ein;
    cout<<ein<<" hast du eingegeben."<<endl;
    if(ein<zahl)  
              cout<<"Die Zahl "<<ein<<" ist kleiner als die gesuchte Zahl."<<endl;
              
  
    if(ein>zahl)        
         cout<<"Die Zahl "<<ein<<" ist groesser als die gesuchte Zahl."<<endl;  
        
        
    if(ein==zahl)      
              cout<<"Volltreffer! Herzlichen Glueckwunsch."<<endl;
      

    }
              
                
    return 0;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.10.2007, 16:42 Uhr
opiWahn



Hä und was hast du daran geändert?
aber danke
Edit: tatsächlich! so geht es Oo

Dieser Post wurde am 17.10.2007 um 16:44 Uhr von opiWahn editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.10.2007, 17:40 Uhr
öni



ich habe die Zufallszahlzuweißung auserhalb der Schleife gemacht....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.10.2007, 20:24 Uhr
opiWahn



Huch stimm! Mir ist gar nicht aufgefallen, dass ich die in meine Schleife gemacht habe :P
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.10.2007, 20:56 Uhr
xXx
Devil


Sooo ... mal aufräumen:

C++:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <limits>

int main()
{
    std::cout    << "Copyright (c) 2007 opiWahn\n"
                << "Zahlenraten V0.1\n"
                << "Es wird nach einer Zahl gesucht. Finde sie heraus!" << std::endl;
    
    std::srand(static_cast<unsigned>(std::time(NULL)));

    const unsigned int min(1);
    const unsigned int max(50);  

    unsigned int number(min + std::rand() % (max - min + 1));
    unsigned int input(0);

    do
    {
        do {
            std::cout << "Zahl: ";
            std::cin.sync(); std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        } while (!(std::cin >> input));
        
        if (input != number)
            std::cout << "Die Zahl " << input << " ist " << (input > number ? "groesser" : "kleiner") << " als die gesuchte Zahl." << std::endl;    
    }
    while (number != input);  
  
    std::cout << "Volltreffer! Herzlichen Glueckwunsch!" << std::endl;
    std::cin.sync(); std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cin.get();
}
... Dann hast du mal eine Abbruchbedingung ... sonst hast du ja ne endlosschleife drin ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.10.2007, 21:18 Uhr
Hans
Library Walker
(Operator)



Zitat von opiWahn:
3. Geht das auch nur mit geraden Zahlen?


Ja, dazu musst Du die Zahlen aber selber "gerade biegen". Ein "einfacher Trick", der immer funktioniert ist, wenn Du einfach das Bit 0 der Zahl auf 0 setzt. Habe aus Deinem Programm mal ein Beispiel gemacht, das 20 Zufallszahlen erzeugt und ausgibt. Erst die Zahl so ausgegeben, wie sie erzeugt wurde, anschliessend wird sie mit dieser Operation

C++:
zahl &= ~1;

gerade gemacht, und wieder ausgegeben.
Hier mal das ganze Programm:

C++:
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    int i, zahl;

    cout<<"20 Zufallszahlen zwischen 1 und 100"<<endl;
    cout<<"wie sie erzugeugt wurden, und \"begradigt\"."<<endl;
    srand (982);  
    for (i=1; i<=20; i++)
      {    
        zahl = rand()%(100+1);
        cout <<zahl<< ", ";
        zahl &= ~1; // zahl gerade biegen, indem bit 0 gelöscht wird
        cout <<zahl<< endl;
      }
    return 0;
}



Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.10.2007, 21:21 Uhr
xXx
Devil



Zitat:
1. immer wenn ich die zahl richtig tippe, kommt unendlich oft der "Glückwunsch" Satz.
2. Ich hab nen Zufall eingebaut. Aber er sucht sich immer 50,5 aus.
3. Geht das auch nur mit geraden Zahlen?
3 hat Hans schon beantwortet.
1. Du hattest eine Endlosschleife drin.
2. Du musst std::rand auch mit std::srand einmal in deinem Programm initialisieren(am besten mit einem dynamischen Wert => die Zeit(std::time))
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.10.2007, 14:21 Uhr
opiWahn



Vielen dank @ alle, für die Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: