String-Index beim BCB
-
Hallo, ich habe eine Ansi-String variable, nu will ich aber auf Index 3 zugreifen. String ist auch lang genug, wieso meckert der BCB dann bei mir?
Code:
String name="Name";
String Copy;
int zufall;[...]
srand(time(0));
zufall=rand()%4;
for(int i=0;i<4;i++)
Copy+=name[zufall];
-
Der Index beginnt bei 1
-
geht immernoch nicht, gleiche Fehlermeldung.
-
na welche denn ?
-
Hmm
ich glaub das kann so net funtzen. Wenn du bei zufall = rand() % 4 und da kommt 0 als erstes raus, dann greift er ja schon fehlerhaft zu.
Was für ne meldung gitb er dir denn aus? Dann können wir dir auch nch etwas mehr helfen
-
Jetzt hab ich schon statt 4 die 5 hngeschrieben, aber immernoch der gleiche Fehler, weiß net genau, aber irgendwie meckert er nicht wegen dem index, sonst hätte er mir ja nicht die gleiche oder gar überhaupt keine fehlermeldung mehr gebracht.
-
ah, cool, ich habs. So klappts:
String name="Name";
String Copy;
int zufall;[...]
srand(time(0));
zufall=rand()%5;
for(int i=0;i<4;i++)
Copy=Copy+name[zufall];
-
Wohl mehr aus Zufall. Auch hier ist nicht garantiert das Zufall nicht Null liefert.
-
addiere einfach zum zufallswert 1 hinzu.
-
Wieso sollte es 0 liefern?
rand()%(4-1+1)+1;
ist das selbe wie
rand()%5;
Alsodas versteh ich jetzt wieder nicht.
-
und sunday, dann kommt er ja über das Maximum des Strings.
-
es ist nicht das Gleiche.
Wie wäre es mit (rand()%4)+1;
oder besser(rand()%(name.Lenght()-1))+1
[ Dieser Beitrag wurde am 27.06.2003 um 11:36 Uhr von Braunstein editiert. ]
-
#include <stdlib.h> // für random() void __fastcall TForm1::FormShow(TObject *Sender) { // zufallsgenerator initialisieren randomize(); } void __fastcall TForm1::Button1Click(TObject *Sender) { // random liefert eine zufallszahl im bereich 0-4; int zahl = random(5) + 1; }
-
Dann bau dir ne abfrage
if(zufall == 0) zufall++;
dann is das auch kein prob mehr.
-
Danke Sunday, so einfach ist das beim BCB, cool.
-
Original erstellt von Spieleprogrammierer:
[...]so einfach ist das beim BCB, cool.Nein, so einfach ist das mit C.... das hat nix mit dem BCB zu tun. Vielleicht solltst du über Vorschläge anderer erst nachdenken, bevor du sie als "Fehlerhaft" beurteilst...
-junix
-
junix, ich habs noch nie erlebt, dass rand()%5 0 zurückliefert. und die Funktion random(); msagte jemand zu mir wrde aus C++ rausgenommen, sodass man srand(); nehmen müsste. Nicht hier, aber in meiner Schule.
-
srand:
Beschreibung
Initialisiert den Zufallszahlengenerator.
Der Zufallszahlengenerator wird beim Aufruf von srand mit einem Argumentwert von 1 neu initialisiert. Durch den Aufruf von srand mit einem bestimmten Parameter seed kann er auf einen neuen Startwert gesetzt werden.
Rückgabewert
Keiner
Beschreibung
Zufallszahlengenerator.
random liefert eine Zufallszahl im Bereich von 0 bis (num-1) zurück. random(num) ist ein Makro, definiert in stdlib.h. Sowohl num
als auch die zurückgelieferte Zufallszahl sind Integerwerte.Rückgabewert
random liefert einen Zahl zwischen 0 und (num-1) zurück.
Protabilität: Win32
Noch fragen ?
-
Original erstellt von Spieleprogrammierer:
junix, ich habs noch nie erlebt, dass rand()%5 0 zurückliefert.Da es sich um eine Zufallszahl handelt, wirst du wohl zufällig dieses Verhalten nie erlebt haben... oder (was ich mir eher vorstellen kann) es hat einen Fehler versacht, du hast ihn versucht zu reproduzieren, ging nimma, -> da war doch kein fehler
Original erstellt von Spieleprogrammierer:
und die Funktion random(); msagte jemand zu mir wrde aus C++ rausgenommen, sodass man srand(); nehmen müsste. Nicht hier, aber in meiner Schule.Komplett falsch. randomize() ist eine original Borland verbesserte Initialisierungsfunktion die vermutlich intern nix weiter macht als srand aufzurufen. srand hingegen ist ANSI C.
-junix
-
Au jetzt seh ich das erst. Du hast ja srand mit random verglichen. Das zu vergleichen ist Äpfel mit Birnen verglichen denn srand macht nicht das Selbe wie random... und das wurde dir bereits anderswo eigentlich eingeprügelt.
-junix
-
Original erstellt von Spieleprogrammierer:
Wieso sollte es 0 liefern?
rand()%(4-1+1)+1;
ist das selbe wie
rand()%5;
Alsodas versteh ich jetzt wieder nicht.ist mir klar. ist ja auch mathe. du solltest doch nix mehr posten, was mit mathe zu tun hat.
rand()%(4-1+1)+1;rand()%4+1;
und hier greift "punktrechnung vor strichrechnung" und du bist raus.