Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Zeitschleife in C programmieren





Frage

Hallo, ich habe folgendes Problem. Ich versuche gerade C zu lernen. Nun will ich in einem Programm eine Matheaufgabe ausgeben und der Anweder soll 10 Sekunden Zeit haben sie zu lösen. Also dachte ich an eine do-while Schleife, die pro durchlauf eine Variable um 1 erhöht und dann noch sleep(1000) ausführt. Wenn die Variable also bei 10 ist, müssten ja 10 Sekunden vergangen sein. Nebenbei, soll das Programm aber auch noch darauf achten, on der Anwender schon eine Lösung eingegeben hat und wenn ja die zeitschleife unterbrechen und im Programm weiter machen. Ich schreib den Quelltext, den ich mir ausgedacht habe, der aber nciht geht mal unten hin. Kann mir da jemand helfen? Ist es grundsätzlich falsch, oder hab ich nur irgendwo einen Denkfehler? printf("Bitte Lösung eingeben"); do { if(kbhit()) { break; } sleep(1000); zeit++; } while (zeit != 10); scanf("%d", &ergebnis);

Antwort 1 von rudophl

Zitat:
der aber nciht geht


du hast nicht dazu geschrieben was denn nicht geht.

Antwort 2 von Hexadecimal

Oh, sorry

naja es läuft nicht weiter. Normalerweise müsste es ja nach 10 Sekunden abbrechen und im Programm weiter springen. Tuts aber nicht. Es springt nur auf das kbhit() an, aber die zeit lässt es völlig kalt.

Antwort 3 von Supermax

Hast du die Variable "zeit" vorher initialisiert? Also eine Zeile
int zeit = 0;
oder ähnlich? Sonst kann es sein, daß "zeit" einen beliebigen Wert hat und die Bedingung "zeit != 10" immer erfüllt ist bzw. erst wenn die Variable "überläuft" und wieder bei 0 beginnt.

Antwort 4 von Hexadecimal

Nein habe ich nicht gemacht. Ich dachte die <time.h> brauch man nur, wenn es um Zeitangaben wie Uhrzeit und Datum geht. Aber ich werde es testen, Danke erstmal.

Antwort 5 von Hexadecimal

Ach halt, falsch gelesen, Ja, eine Variable "zeit" hab ich definiert. Ich dachte wir reden jetzt von der Bibliothek.

Antwort 6 von Supermax

Bau doch mal in die Schleife eine Test-Ausgabe ein, z.B. ein
fprintf(stderr,"zeit=%d\n",zeit);
, dann siehst du wo es eventuell haken könnte.

Mit welchem Entwicklungssystem arbeitest du denn überhaupt?

Antwort 7 von Hexadecimal

Ich habe nur DevC++ zur Verfügung. Kann es sein, dass das Programm während der sleep() gar keine Befehle aufnimmt? Gibt es noch andere Zeitschleifen unter C, die einfach nur dafür da sind Zeit zu "verbrauchen"?
Oder mal anders. Wie würdet ihr denn die Aufgabe lösen?

Der Anwender soll eine Matheaufgabe sehen. Die Lösung zu allen Aufgaben ist immer nur eine einstellige Integer - daher die Idee mit dem kbhit() - Nach 10 Sekunden soll er automatisch zur nächsten Aufgabe weitergeleitet werden. Gibt er innerhalb dieser Zeit eine Lösung ein, soll die Zeitschleife abgebrochen werden und er wird schon eher zur nächsten Aufgabe weiter geleitet.

Bin mal gespannt, wie ihr an sowas ran gehen würdet. Bin wie gesagt noch absoluter C Dau (daher bitte kompliziertere Dinge erklären wenns geht).

Antwort 8 von Hexadecimal

Ah ich habs, falls es jemanden interessiert. Es hat die ganze Zeit funktioniert, aber es konnte nicht zur nächsten Aufgabe springen, weil es durch die scanf() Anweisung auf eine Eingabe gewartet hat. Blöder Fehler, das geb ich zu.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: