Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Zufallszahl in Dialog anzeigen lassen!

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 < [ 2 ]
000
19.07.2002, 16:38 Uhr
pvjb



Hallo,

nett das neue Forum :-)

Also, ich will per Zufallsgenerator, also mit der Funktion rand() eine Zahl erstellen, und danach diese in einem Dialog anzeigen. Allerdings zeigt der mir dann nur einfach ein komisches Zeichen so an.

Wie kann ich also folgenden Quelltext so umschreiben, das ich die Variable zahl auf dem Dialogfeld anzeigen lassen kann! Ich habe auch ein Objekt, und m_strZahl ist die passende Membervariable. Daran liegt es also nicht


C++:
void DialogDlg::Zufallsgenerator()
{
    int zahl=rand()%100;
    m_strZahl=zahl;
    UpdateData(FALSE);
}




Wie lässt man eigentlich von einem benutzerdefinierten Dialogfeld ein nächstes benutzerdefiniertes Dialogfeld aufrufen! Ich habe das jetzt immer über das Hauptdialogfeld gemacht (Dialogfeld 1 geöffnet, dann nach dem Schließen, direkt Dialogfeld 2 öffnen), aber muss man das immer so machen? Ich würde nämlich gerne etwas flexibler von dem 2. Dialogfeld auf die Variablen und Daten von Dialogfeld 1 zugreifen!

Danke und Tschüss

Dieser Post wurde am 19.07.2002 um 19:00 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.07.2002, 17:01 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,

C++:
    int zufall;
    char str[100];
    srand(clock()); /* time.h includieren */
    zufall = (int) (rand()*101)/RAND_MAX;
    sprintf(str,"%d", zufall);
    m_strZahl.SetWindowText(str);


--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.07.2002, 18:26 Uhr
pvjb



Hallo,

irgendwie funktioniert das nicht so richtig:

error C2039: 'SetWindowText' : Ist kein Element von 'CString'

Was macht denn die Funktion srand? Und von sprintf und SetWindowText habe ich bis jetzt auch noch nix gehört! Gibt es denn nicht auch eine Möglichkeit das mit rand() usw. so wie oben von mir beschrieben zu machen? Weil ich bin ja noch Anfänger und will nicht mit Programmteilen etc. um mich werfen, welche ich überhaupt nicht so verstehe...... Ich wollte jetzt eigentlich mit einem kleinen Programm mein Wissen testen und festigen! Deswegen!

Tschüss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.07.2002, 18:58 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Da hat sich uwe "vergaloppiert", er hat gedacht das m_strZahl eine CEdit-Variable ist, so wenn es eine CString ist:


C++:
int zufall;
char str[100];
srand(clock()); /* time.h includieren */
zufall = (int) (rand()*101)/RAND_MAX;
sprintf(str,"%d", zufall);
m_strZahl = str;
UpdateData(FALSE);



Uwe's Lösung (also m_strZahl als CEdit) ist eleganter, da man dann kein UpdateData benötigt!

Zur Erklärung:

srand initailisiert dir deinen Zufallsgenerator, sonst kommt immer das gleiche raus ...

sprintf kopiert dir die Zahl (hier in "zahl") in den String "str"
--
class God : public ChuckNorris { };

Dieser Post wurde am 19.07.2002 um 19:00 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.07.2002, 19:03 Uhr
pvjb



Hallo,

danke für die Antwort.

Das wollte ich wissen!

Tschüss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.07.2002, 20:47 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Flo,

Zitat:
FloSoft postete
Da hat sich uwe "vergaloppiert", er hat gedacht das m_strZahl eine CEdit-Variable ist, so wenn es eine CString ist:


Das hast du aber nett geschrieben. Du weist ich war in Eile
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.07.2002, 22:38 Uhr
pvjb



Hallo,

leider gibt es da noch ein Problemchen:

Ich kann nämlich nach dieser Variante überhaupt nicht eine Variable für den Zufallsgenerator einsetzen! Ich will nämlich, dass der Benutzer festlegt, wie hoch die Zufallszahl sein darf! In dem Beispiel liegt sie ja höchstens bei 100, aber man soll es festlegen können, und für die Arraygröße kann ich schlecht eine Variable einsetzen! Habt ihr eine gute Lösung?

Tschüss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.07.2002, 22:56 Uhr
pvjb



Hallo,

wieso geht eigentlich dieser Quelltext nicht?


C++:
void CRAbfrageDlg::Aufgabe()
{
    int summand1;
    int summand2;
    Summand(&summand1);
    Summand(&summand2);
    m_strAufgabe=summand1+" + "+summand2;
    UpdateData(FALSE);
}



int CRAbfrageDlg::Summand(int *summand)
{
    char fsummand[100];
    srand(clock()); /* time.h includieren */
    *summand = (int) (rand()*101)/RAND_MAX;
    sprintf(fsummand,"%d", *summand);
    return 0;
}




Bei mir erscheint in dem Dialog an der Stelle gar nichts. Zwischendurch stand dort ein @. Gebt mir mal bitte ein paar Tipps, ich bin ein hilfloser Anfänger!

Tschüss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.07.2002, 01:47 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,

C++:
void CRAbfrageDlg::Aufgabe()
{
    /* Dieses Mal ist m_strAufgabe eine CString z.B. für
       ein statisches Textfeld */

    int summand1=10;    /* Initialisierung */
    int summand2=100;
    /* Format bringt das selbe Ergebnis wie sprintf()
       Der Funktion Summand werden nacheinander die Variablen
       summand1 u. summand2 übergeben */

    m_strAufgabe.Format("%d",Summand(summand1)+Summand(summand2));
    UpdateData(FALSE);
    
}

int CRAbfrageDlg::Summand(int summand)
{
    srand(clock()); /* Startpunkt für Pseudozufallszahl setzen */
    /* in der Variable summand ist jetzt summand1 bzw. beim zweiten
       Aufruf summand2 enthalten. Dieser wird dazu genutzt die obere
       Grenze für die "Zufallszahl" zu setzen */

    int zufall = (int) (rand()*summand+1)/RAND_MAX;
    /* der Wert geht jetzt zurück nach Aufgabe(), wo er direkt addiert
       werden kann, da die Funktion Summand(int) vom Typ int ist. */

    return zufall;
}

Wenn ich jetzt keinen Silberblick aus der Wirtschaft mitbekommen hab, sollte das auch funktionieren. Hick... und Nacht...
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.07.2002, 17:28 Uhr
pvjb



Hallo,

danke!!! Super Lösung, jetzt funktioniert aber endgültig alles, und ich kann auch flexibel mit den Zufallszahlen umgeben, dank der Umstellung in das Format int, das was ich eigentlich von Anfang nur gesucht hatte! Die Funktionsweise deiner Funktionen leuchtet mir auch vollkommen ein, deswegen kann ich jetzt richtig gut weiterarbeiten!

Danke und Tschüss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


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: