Anfängerfragen
-
Hallo erstmal,
hab mich nach ein wenig Pythonerfahrung aus der Schule (habs bis zum selbsterstellen Tetris-Klon selbstständig geschafft) mal an C++ gesetzt und hab auch von nem Freund nen Buch ausgeliehen welches auf "Kids" zugeschnitten ist und arbeite mich grad durch den Crashkurs. Ich arbeite mit Microsoft Visual C++ 2010 Express und komme soweit ganz gut klar. Muss mich nur noch genau merken für welche commands ich welche Module importieren (bzw in C++ heißt es ja #include
) muss.
Jedoch stieß ich soeben auf ein kleines Problem hinter dessen Fehler ich einfach nicht kommen kann, hier mal der Quelltext:void main(void) { int zahl; do { zahl = rand() % 50 + 1; cout << zahl << endl; } while (zahl != 42); cout << "Da ist sie!" << endl; getch(); }Hierbei erwarte ich sowas als Ausgabe:
3 45 17 22 36 42 Da ist sie!Aber stattdessen isses jedesmal:
42 Da ist sie!Ich ahne es wird ein kleiner dummer Fehler sein, ich bitte um Aufklärung

MfG Saob
-
Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
rand() erzeugt nur Pseudo-Zufallszahlen. Das heißt bei gleichem Seed erzeugt es immer die selbe Reihe an Zufallszahlen.
Du initialisierst den auch gar nicht, dafür nimmt man "srand". So könnte das dann ausschauen:int main() { srand(time(0)); int zahl; do { zahl = rand() % 50 + 1; cout << zahl << endl; } while (zahl != 42); cout << "Da ist sie!" << endl; //getch(); }Scheinbar erzeugt er bei dir uninitialisiert immer die erste Zahl so, dass rand()%50+1 == 42

Und noch 2 Anmerkungen:
void main() ist kein gültiges C++! der return ist immer int! (int main()).
Und wenn du in C++ keine Parameter für eine Funktion (hier main()) angibst, kannst du dir das void als Parameter sparen.
-
Ohne srand liegt noch weniger Zufall vor als mit srand.
Und immer schön int main() {return 0;} schreiben

lg, freakC++
-
freakC++ schrieb:
Und immer schön int main() {return 0;} schreiben

Nein

-
freakC++ schrieb:
Und immer schön int main() {return 0;} schreiben

Ein guter Compiler kann das wegoptimieren; es wird dann gar kein binary erzeugt

Im Ernst: Das "return 0" kann man sich sparen.
-
Der Vollständigkeit halber sollte das gesetzt werden.

lg, freakC++
-
freakC++ schrieb:
Der Vollständigkeit halber sollte das gesetzt werden.

Das hat nichts damit zu tun, der Standard erlaubt explizit, in
maindasreturnwegzulassen (dann wird0zurückgegeben).
Warum sollte man es also schreiben?
-
freakC++ schrieb:
Der Vollständigkeit halber sollte das gesetzt werden.

So ein Unsinn.
Oder schreibst du auch "der Vollständigkeit halber" das
voidin leeren Parameterlisten?
-
Nexus schrieb:
freakC++ schrieb:
Der Vollständigkeit halber sollte das gesetzt werden.

So ein Unsinn.
Oder schreibst du auch "der Vollständigkeit halber" das
voidin leeren Parameterlisten?*Räusper*
http://www.c-plusplus.net/forum/viewtopic-var-t-is-233351-and-highlight-is-.html
-
SeppJ schrieb:
*Räusper*
http://www.c-plusplus.net/forum/viewtopic-var-t-is-233351-and-highlight-is-.html
Und dann nicht einmal konsistent. :p
int main ()Wie auch immer, beides ist unnötig und ist primär Stilsache. Wobei
voidin Parameterlisten in C++ relativ selten anzutreffen ist.
-
Hallo,
wie gesagt, ich habe selbst Bücher, die auf das void bestehen und ich habe es einst selbst verwendet, bis ich von euch eines besseren belehrt wurde. Das mit der Vollständigkeit war nicht ganz so ernst gemeint - daher der Smilie. Aber nunja. Ich schreibe momentan stets return und das mit dem Standard wusste ich nicht.Naja - wieder was gelernt

lg, freakC++
-
@freakC++
Steht auch in deinem Buch :p