Hilfe

teufel964

Grünschnabel
C++Builder, Zahlen werden nicht angezeigt, random

Hi leute,

brauche hilfe bei diesem Script

Code:
// Datei - Rechnen1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Rechnen1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int Zahl1, Zahl2, Ergebnis;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label3Click(TObject *Sender)
{
// Zufallsgenerator starten
randomize();
// zwei Zufallszahlen zwischen 0 und 99 erzeugen
Zahl1 = random (99) + 1;
Zahl2 = random (99) + 1;
// Zahlen umwandeln und Label zur Anzeige zuweisen
Label1->Caption = String (Zahl1);
Label2->Caption = String (Zahl2);
// Infotext anzeigen
Label3->Caption = "Wähle die Rechenart!";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Ergebnis = Zahl1 + Zahl2;
Label3->Caption = "Ergebnis der Addition: " + String(Ergebnis);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Ergebnis = Zahl1 - Zahl2;
Label3->Caption = "Ergebnis der Subtraktion: " + String(Ergebnis);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Ergebnis = Zahl1 * Zahl2;
Label3->Caption = "Ergebnis der Multiplikation: " + String(Ergebnis);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Ergebnis = Zahl1 / Zahl2;
Label3->Caption = "Ergebnis der Division: " + String(Ergebnis);
}
//---------------------------------------------------------------------------

so weit alles gut - keine Fehler, leider erzeugt er nicht die Zufallszahlen Zahl1 und Zahl2 und darum ist das Ergebnis immer '0'
dadurch erfolg auch keine Zuweisung der Label1 oder Label2. Die Aktionen der Button 1 - 4 werden korekt ausgeführt.

Danke im Voraus für euro Hilfe

Teufel964
 
Zuletzt bearbeitet:
Hi.

Das ist schwer zu sagen, da du die Verbindung der Signale zu den Widgets nicht zeigst.

Klickst du denn auch auf Label3 ?

randomize() solltest du am besten nur einmal im Programm aufrufen, einfach im Konstruktor.
 
Hi deephroat,

danke für deine Antwort.

Auf Label 3 wird nicht geklickt.

Die Aktionen gehen nur von den Button 1 - 4 aus. Das Klappt auch. Klicke ich auf Button 1 dann zeit er mir den Satz "Ergebnis der Addition" im Label 3 an, aber er sollte dann auch das Ergebnis anzeigen. Da das Script aber keine Zahlen erzeugt erfolgt auch Rechnung.

Das ganze stammt aus dem Buch C++ für Kids von Hans-Georg Schumann aus dem bhv Verlag und ist als Lehrbuch für den Informatikunterricht in Schulen gedacht.

Mehr auskünfte kann ich dir leider nicht geben

MfG

Teufel964
 
Hi deephroat,

danke für deine Antwort.

Auf Label 3 wird nicht geklickt.
Das ist seltsam, da

1. der Name der Methode (Label3Click) nahelegt, das auf einen Klick auf Label3 reagiert werden soll.

2. die Methode Label3Click ja auch irgendwie aufgerufen werden muss

Wie sind denn die Ereignisse genau verdrahtet? (Screenshot?)

Wann soll denn die Methode Label3Click aufgerufen werden, wenn nicht bei Click auf Label3?

Zu guter Letzt: Klick doch einfach mal auf Label3.

Oder verschiebe den Code aus der Label3Click Methode in den Konstruktor der Klasse.
 
Ändere dein Thread titel man weiß gar nicht bei was du hilfe brauchst.

geht es um:
Code:
Zahl1 = random (99) + 1;
Zahl2 = random (99) + 1;
********

wenn ja dann ist es falsch.
http://www.cplusplus.com/reference/cstdlib/rand/

Code:
zahl1 = rand() % 100 + 1; //zwischen 1 und 100 wenn es zwischen 1 und 99 sein soll ändere die 100 
...

wenn es sich erledigt hat makier das thread auch auf erledigt bitte.

Danke
 
Hi zusammen,

danke erst einmal für die Antworten.

an deepthroat

Das Label3 lässt sich nicht klicken, war wohl auch nicht vorgesehen, warum der Editor dies so macht weis ich nicht. Es handelt sich hier um den Borland C++ Builder Ver. 6.0, der scheit hinter jedem Objekt ein Click zu setzen.

an Alpha63

danke für den Link, war echt hilfreich, werde es nachher einmal ausprobieren.
Das Problem war, dass das Programm keine Zahlen generiert hat und diese dann auch nicht ausgeben konnte. Damnach auch keine Rechnung erfolgte.
habe noch einmal im Buch nachgelesen Seite 82 steht def.
Zahl1 = random (99) +1;
Möglicheerweise wäre es ein Fehler im Buch!
solle das der Fehler gewesen sein werde ich die Frage schliessen.

Danke nochmals

Teufel964
 
an deepthroat

Das Label3 lässt sich nicht klicken, war wohl auch nicht vorgesehen, warum der Editor dies so macht weis ich nicht. Es handelt sich hier um den Borland C++ Builder Ver. 6.0, der scheit hinter jedem Objekt ein Click zu setzen.
Normalerweise wird nur eine Ereignisbehandlungsmethode generiert wenn man ein Klick-Ereignis für ein bestimmtes Objekt definiert.

Verschiebe einfach den Code in den Konstruktor.
an Alpha63

danke für den Link, war echt hilfreich, werde es nachher einmal ausprobieren.
Das Problem war, dass das Programm keine Zahlen generiert hat und diese dann auch nicht ausgeben konnte. Damnach auch keine Rechnung erfolgte.
habe noch einmal im Buch nachgelesen Seite 82 steht def.
Zahl1 = random (99) +1;
Möglicheerweise wäre es ein Fehler im Buch!
Nein, das ist kein Fehler im Buch, sondern eine Besonderheit von Borland C++.
 
Da das Thema noch offen ist: Auf die Gefahr hin, dass ich mich gleich ziemlich in die Nesseln setze: Was macht randomize()?
Sollte man nicht die time.h einbinden, im Konstruktor ein
C:
srand(time(NULL));
schreiben und dann erst rand() aufrufen, damit es für die "Zufallszahlen" überhaupt einen Seed gibt?

Gruss
cwriter
 
Zurück