einfacher Timer
-
Moin,
Ich habe zwar schon nach einem Timer gesucht allerdings waren die meisten die ich fand zu komplex für meine Verhältnisse. weshalb ich hier noch einmal nach einem einfachem lösungsansatz fragen wolltenIm wesentlichen geht es darum das 2 zufallszhalen zwischen 0 und 25 generiert werden und der nutzer diese errechnen soll. Macht er es richtig kann er eine neue Aufgabe rechnen macht er es falsch hat er 4 weiter versuche die Aufgabe zu lösen.
Soweit so gut.Nun dachte ich mir das es ganz schön wäre wenn ein Timer startet sobald die erste Aufgabe erscheint. Dieser Timer läuft von einer gewissen zeit runter. (100 sekunden oder was auch immer)
erreicht der timer null wird das programm beendet und dem nutzer wird angezeigt wie viele aufgaben er geschafft hat.Ich habe gelesen das ich die eigentlich mit der time.h bib hinbekommen sollte
ich hoffe ihr könnt mir einen kleinen denk anstoß geben
greetz fabus
hier also der programmcode. ist jetzt einfach runtergeschrieben also verzeiht mir rechtschreibfehler
#include "stdafx.h" #include <stdio.h> #include <time.h> #include <stdlib.h> int main() { //Deklarationen // int ze,zz; int e,ee; int a=1; int b=0; int neu; //Neuer Zyklus // do{ //Zufallszahlen generieren // srand(time(0)); ze = rand() %25; zz = rand() %25; //Ergebnis Eingabe // e=ze*zz; do { printf(" %d Versuch \n", a); printf("%d multipliziert mit %d ergibt = ", ze,zz); scanf("%d",&ee); //Ergebniss Vergleichen // ee eingabe des schülers e kalkulation des Rwechners // //Richtiges Ergebnis // if(ee==e) { printf("Gut gemacht, Sie haben das Ergebnis geloest!\n\n"); printf("Moechten Sie eine weitere Aufgabe bekommen? [1] JA [2] NEIN \n"); scanf("%d", &neu); a=1; b=b+1; } //Falsches Eregbnis // else { printf("Leider Falsch!\n\n"); a=a+1; } }while(a>1 && a<6); //Nach dem 5tem Versuch // if(a==6) { printf("Das Richtige Ergebniss hätte gelautetn %d \n\n", e); printf("Sie haben %d Aufagben korrekt geloest \n", b); return 0; } }while(neu==1); return 0; }
nicht der schönste stil aber läuft
-
Vorweg:
srand()
ruft man nur einmal am Anfang des Programms auf. (nicht in einer Schleife)
Zudem generiest du nur Zahlen von 0 bis 24.Schau dir doch die Funktionen von time.h an. Da wird dir schon eine Idee kommen.
Aber, solange du auf eine Eingabe mit
scanf()
wartest, wartet auch dein Programm (die Zeit läuft aber weiter). Du hast also keine Möglichkeit zu schauen, ob die Zeit abgelaufen ist.
-
Ist es den weiter schlimm wenn ich srand dort stehen lasse.
Also ich werde das bei zukünftigen Programmen ändern aber hat es weiteren einfluss?
-
fabus schrieb:
Ist es den weiter schlimm wenn ich srand dort stehen lasse.
Ja, schreib es vor die Schleife.
Zu der Timer Geschichte: Mit systemabhängigem Zeugs kann man das so machen wie du willst, mit Standard-C kannst du nur die Zeit zwischen "Anfrage" und der Eingabe messen.
-
Die "Zufallszahlen" von
rand()
werden berechnet, daher sind sie eben nicht zufällig.
rand() rechnet mit der vorher ermittelten Zahl weiter und versucht ein quasi zufällig Folge von Zahlen zu erzeugen.
Beim Programmstart wird ein fester Wert angenommen. Das bedeuted, dassrand()
immer die selbe Folge erzeugt.Mit srand() setzt man den Startwert vom Zufallszahlengenerator. Das muss nur einmal erfolgen, den Rest macht rand.
Damit man noch einen "zufälligen" Startwert hat, nimmt man i.A.
time(NULL)
(Unixtime = die Anzahl der Sekunden seit dem 1.1.1970). Abertime(NULL)
ändert sich nur jede Sekunde.for (int i=0; i<10000; ++i) { srand(time(NULL)); printf("%6d : %d\n", i, rand()); }
liefert dir haufenweise die gleichen Zahlen.