Zeitfunktion in C - Anwendung

Name1235

Banned
Registriert
Okt. 2015
Beiträge
51
Hallo,
ich wüde gerne jede Sekunde einen "." ausgeben, bis eine eingestellte Zeit vorbei gegangen ist.
Aber irgendwie klappt das noch nicht und er gibt viel zu viele "." aus.
Wo liegt mein Fehler?
-------------------------------------------------------------
int i=0;

long pause = 5* CLOCKS_PER_SEC;
clock_t anfangszeit = clock();

while(anfangszeit + pause > clock())
{
if (clock() >= anfangszeit + CLOCKS_PER_SEC)
{
printf(".");

i=i+CLOCKS_PER_SEC;
}

}
 
Name1235 schrieb:
Code:
if (clock() >= anfangszeit + CLOCKS_PER_SEC)
{
    printf(".");       

    i=i+CLOCKS_PER_SEC;
}
In dieser Form ist die Bedingung des if-Blocks nach der ersten Sekunde immer wahr. Du inkrementierst zudem i ohne diese Variable anderweitig zu benutzen. Wolltest du i benutzen, um die Bedingung für den if-Block zu aktualisieren?
 
ich schreibe doch am Ende i=i+CLOCKS_PER_SEC;
Damit wird doch zu i die Anzahl Rechenschritte pro Sekunde hinzuaddiert.
Achso, ich wollte i zur anfangszeit hinzuaddieren.

Also so:

if (clock() >= anfangszeit + i)

Damit geht es, danke ;)
 
Zuletzt bearbeitet:
Wenn Bedingung if (clock() >= anfangszeit + CLOCKS_PER_SEC) erfüllt ist , wird bei jedem Schleifendurchlauf der While -Schleife ein Punkt ausgeben. Du willst aber nur einen Punkt ausgeben, wenn das nächste Vielfache von CLOCKS_PER_SEC erreicht ist
Du könntest es etwa so machen:

int i=1;

long pause = 5* CLOCKS_PER_SEC;
clock_t anfangszeit = clock();

while(anfangszeit + pause > clock())
{
if (clock() >= anfangszeit + i* CLOCKS_PER_SEC)
{
printf(".");

i++;
}

}
 
Du kannst mit dem BB Code im Forum <CODE> </CODE> nutzen um Quelltext einzuklammern. Das wird dann weit schöner dargestellt. Musst die <> nur durch [] ersetzen.

Wenn du dir die Dokumentation von clock() durchliest sollte es eigentlich einleuchten, wieso diese Funktion kein guter Zeitgeber sein kann. In time.h finden sich aber Alternativen.

Noch ein Tip, deine Endlosschleife kannst du entschärfen, indem du wait() mit sinnvollen Werten einbaust. Dann verschleuderst du nicht die ganzen CPU-Zyklen um sinnlos Schleifendurchläufe zu durchwandern.
 
Zurück
Oben