Zufallswert immer 1???
-
Hi Leuts, ich hoffe ihr könnt mir helfen. Warum ist im folgenden Listing der Zufallswert immer 1?
#include <stdio.h> #include <conio.h> #include <stdlib.h> int main(void) { int ratezahl, count=0, erraten=0; /*Die 3 Bezeichner brauch ich später noch*/ int zufall = rand() % 10; printf("%d" ,zufall); getch(); return 0; }
Wer das Buch "C von A bis Z" besitzt findet alles auf Seite 162, allerdings wird dort davon ausgegangen das der Zufallswert sich eben ändert^^
Danke schonmal für eure Hilfe
-
[man]rand[/man]Das ist natürlich die falsche Manpage, hier ist die richtige:
http://linux.die.net/man/3/randWie funktioniert das mit den Manpages im Forum?
-
rand() startet immer mit dem gleichen Wert.
Wenn du einen anderen Startwert willst, musst du den mit srand(); setzen.EINMAL am Anfang des Programms.
Damit der auch wirklich jedesmal unterschiedlich ist, nimmst du einfach die Zeit als Startwert.
srand( (unsigned) time(NULL) ); //Einmal am Anfang des Programms
Ansonst schau die FAQ des Unterforums: http://www.c-plusplus.net/forum/viewtopic.php?t=39344
-
Meinst du "C von A bis Z" von "Jürgen Wolf"? Welche Version?
Online ist das alles beschrieben:
http://openbook.galileocomputing.de/c_von_a_bis_z/020_c_headerdateien_004.htm#mj5f75e2e5e52fe8e44485e26cdd9a7033
-
EndOfSystem schrieb:
Wer das Buch "C von A bis Z" besitzt findet alles auf Seite 162, allerdings wird dort davon ausgegangen das der Zufallswert sich eben ändert^^
Gib nicht zu viel auf den Inhalt dieses Buches. Der Herr Wolf schreibt alle drei Monate ein neues Buch über die Programmiersprache die er sich in den letzten 2 Monaten angeguckt hat. Das Ergebnis ist entsprechend: Ein geübter Schriftsteller der sich gut liest, aber inhaltlich voller Ungenauigkeiten und Fehler.
-
naja, aber wenn ich nichts auf das buch gebe dann hätte ich 40€ umsonst bezahlt und dieses buch wird von vielen leuten empfolen, da dachte ich dasses gut is. und immerhin versteh ich duch das buch jetzt viele sachen einfacher die ich früher einfach auswendig gelernt habe, aber net wusste was es bedeutet (z.B. die Header stdio.h,conio.h oder namen wie ANSI oder ASCII) wie würdest du mir raten C zu lernen?
-
Das ist halt das Problem als Anfänger. Richtig gute Bücher versteht der meist nicht, da der Schreiber sich kaum noch an seine ersten Schritte erinnern kann oder will.
Und Bücher, die ein Anfänger leichter versteht haben oft sachliche Mängel.
Zu Wolf seinen Büchern. Es sind sicher Mängel in den Büchern aber so viele wie einige hier kolportieren doch nicht. Manchmal hilft auch erst mal 3 Seiten weiter lesen oder das Stichwortverzeichnis ansehen um Problemen beizukommen.
Aber vielleicht kennt ja jemand das C-Buch für Anfänger und Profis, leicht verständlich, fachlich richtig, nicht endlos umfangreich vom Text her und nicht zu vergessen das der Profi auch geistig gefordert wird
Ach die verschiedenen Glaubensrichtungen Stichworte: MSDN und C89, C90, C95, C99
sollten auch erklärt werdenIch hab doch bestimmt noch ein Stichwort vergessen zu erwähnen
MfG f.-th.
-
So schlecht ist das Buch nun auch wieder nicht. Aber, und das trifft eigentlich auf alle Bücher zu, es empfiehlt sich immer, weitere Quellen zu bestimmten Problemen zu Rate zu ziehen, da bietet sich natürlich das INet an.
Zitat aus der bei Galileo zu findenden OpenBook - Version von Herrn Wolf, Kapitel 20.4.4:
"Aber spätestens, wenn das Programm jetzt ein zweites Mal gestartet wird, merken Sie, dass sich diese Zufallszahlen immer wiederholen. Das Problem an der Funktion rand() ist, dass diese immer denselben Startpunkt zur Berechnung der Zufallszahl benutzt. Anders dagegen die Funktion:"
Und nun wird srand erläutert, also alles richtig gemacht, Herr Wolf!
-
Das Buch hat über 1000 Seiten und rand() wird im Kapitel 20.4.4 (von 28) beschrieben.
Ich weiß nicht ob das dann mit Seite 162 so passt. (Die Seitenzahl ist in der Onlineausgabe leider nicht mit angegeben.)
-
Belli schrieb:
"Aber spätestens, wenn das Programm jetzt ein zweites Mal gestartet wird, merken Sie, dass sich diese Zufallszahlen immer wiederholen. Das Problem an der Funktion rand() ist, dass diese immer denselben Startpunkt zur Berechnung der Zufallszahl benutzt. Anders dagegen die Funktion:"
Und nun wird srand erläutert, also alles richtig gemacht, Herr Wolf!
...nur, dass der Satz natürlich komplett falsch ist. Ein solches Verhalten wird für rand() nirgendwo garantiert.
Vergleichbare "Perlen" ziehen sich durch all seine Bücher. Etwa die Behauptung, dass Parameter bei der Funktionsübergabe von rechts nach links ausgewertet würden, und ein eher sporadisches Verständnis von Variablengültigkeit. Die Fehler in seinem Code hätte niemand gebaut, der C gut genug kennt, um es jemandem beizubringen. Beispiel aus "C von A bis Z":
char *eingabe(char *str) { char input[MAX]; printf("Bitte \"%s\" eingeben: ",str); fgets(input, MAX, stdin); return strtok(input, "\n"); }
...und jetzt sag mir, dass man so was einem Anfänger vorsetzen darf, der den Fehler nicht gleich sehen kann, weil er die Sprache nur etwa so gut versteht wie der Autor des Buches, das er liest. Das ist generell das Problem mit Anfängerbüchern und Rezensionen - wenn man etwas gerade aus dem Buch gelernt hat, das man rezensiert, ist man sich zwangsläufig nicht bewusst, dass darunter viel Falsches war - woher auch?
@EndOfSystem: Ich fürchte, du hast da 40€ in den Sand gesetzt, und es wird einige Zeit dauern, dir den Unfug wieder abzugewöhnen, den Jürgen Wolf für Programmierung hält. In der Zukunft würde ich mich an deiner Stelle an renommierte Fachbuchverlage wie Addison-Wesley oder O'Reilly halten, die einen Ruf zu beschützen haben, und mich von Galileo Computing, Markt+Technik, Data Becker und derartigen Vereinen fernhalten, denen es eh schon egal sein kann, was sie verlegen.
-
seldon schrieb:
Das ist generell das Problem mit Anfängerbüchern und Rezensionen - wenn man etwas gerade aus dem Buch gelernt hat, das man rezensiert, ist man sich zwangsläufig nicht bewusst, dass darunter viel Falsches war - woher auch?
Jahaa, aber das ist nur die eine Seite. Der Forumbetreiber propagiert das Buch stur mit besten Kritiken weiter und wenn man ihn deswegen angeht, droht er sogar mit Abmahnungen, weitere Einlassungen gibt's nicht.
Heißt, mit den Wolf- Büchern wird's wohl kein Ende nehmen. Den Return- Fehler auf ungültig gewordenen Speicher gibt's ein paarmal, aber irgendwo weist Wolf sogar noch drauf hin.
Hält ihn aber genausowenig davon ab, ein paar malloc/free- Bugs einzubauen, vor denen er im Text warnt.
Mein Tip zum Lernen ist "The C Book", das ist ähnlich locker, aber ohne grobe Schnitzer.
Im Übrigen hat DirkB schon einen guten FAQ- Link geliefert, irgendwo hatte volkard mal einen Link auf ein interessantes Random- Verfahren gepostet, find' ich aber grad nimmer.
-
ich glaube niemand weiß den perfekten Weg C zu lernen, weils jeder auf ne andere art gemacht hat und sicher keiner im vollen umfang auswendig kann. Ich lese zum beispiel immer wieder von leuten die auf das programm dev-c++ schwören und genau soviele gegenstimmen gibt es die es wiederum als schlecht darstellen, das verhällt sich ähnlich wie bei Visual Studio C++ oder Code::Blocks (welches ich übrigends verwende) wie schon gesagt, es gibt sicher nicht den perfekten weg C zu lernen und es gibt auch nicht den perfekten compiler. ich werd sicher ne menge aus dem buch lernen und alles was da net stimmt werd ich bemerken und nach wegen suchen diese fehler zu beheben. nachdem ich das buch durchhab werd ich sicher weitere sachen lernen und alles was ich net weiß google ich. ich glaube das ist der beste weg, denn jeder hat seine eigene eigene einstellung zum lernen einer programmiersprache, da es jeder anders gelernt hat. daher glaube ich ist meine frage nur wenig sinnvoll nach der besten art des lernens zu fragen. oder was meint ihr?
(entschuldigt die sicher vielen rechtschreibfehler)
-
Ich denke die beste Möglichkeit ist hier alles zu lesen. Dabei habe ich definitiv das meiste gelernt. Es ist nicht immer die beste Lösung, aber wenigstens sieht man hier die diskusionen und kann immer das richtige für sich raussuchen...