# Zeitmessung in einem C-Konsolen-Anwendung?



## Senfy (8. Oktober 2007)

hi@all,

ich als blutiger c anfänger habe eine hoffentlich einfache frage.
ich möchte die zeit (auf 1ms genau) messen die der benuzer für eine eingabe braucht.
ist für eine bestenliste in einem programm das dem benutzer das kopfrechnen trainiert.

ich hoffe es gibt eine gute lösung für mein problem.

thx im voraus


----------



## Mr.Undertaker (9. Oktober 2007)

```
<time.h>

time_t msec = time(NULL) * 1000;
```

Noch genauer sind:

Unter Linux: gettimeofday 
Unter Windows: GetSystemTimeAsFileTime


----------



## Senfy (9. Oktober 2007)

ich stand jetzt schon öfter vor dem problem:
wie kann ich den wert aufgeben lassen?
in diesem fall wie bekomme ich ms auf meinen bildschirm zu sehen?


----------



## Bertelcraft (9. Oktober 2007)

ich würde sagen

```
cout << time_t msec << endl;
```


----------



## deepthroat (9. Oktober 2007)

Hi.





Bertelcraft hat gesagt.:


> ich würde sagen
> 
> ```
> cout << time_t msec << endl;
> ```


Also eigentlich geht's hier gerade um C - nicht um C++. Aber abgesehen davon ist dein Code selbst in C++ falsch.

In C macht man formatierte Ausgaben mit den printf Funktionen:
	
	
	



```
printf("Zeit: %ldms\n", msec);
```
Gruß


----------



## Senfy (9. Oktober 2007)

thx ich kannte die formatierung %ld noch nicht ^^


----------



## Senfy (10. Oktober 2007)

hmm ich kann mir nicht helfen...ich bekomme ständig ein und dieselbe falsche zahl ausgegeben.


----------



## deepthroat (10. Oktober 2007)

Senfy hat gesagt.:


> hmm ich kann mir nicht helfen...ich bekomme ständig ein und dieselbe falsche zahl ausgegeben.


Sollen wir deinen Code raten? Oder sollen wir die falsche Zahl raten? ;-]

Gruß


----------



## Senfy (10. Oktober 2007)

sry,
naja eigentlich ganz einfach

stdio.h, stdlib.h und time.h includen
dann werden 3 int und 4 floatvariabeln + zeiger

int main()
{

do
    {
        srand ( time(NULL) ); /* Die Zufallszahlen werden initialisiert */
        *p_zahl1 = rand() % 10 + 1; /* Generiert zwei Zufallszahlen zwischen 1 und 10 */
        *p_zahl2 = rand() % 10 + 1;
        *p_operator1 = rand() % 4 + 1; /* Generiert eine Zufallszahl die den Operator darstellt */

        switch (*p_operator1)
        {
            case 1: /*Addition */
            {
                printf ("\n%.0f + %.0f = ", *p_zahl1, *p_zahl2);
                scanf ("%f", &*p_u_eingabe);
                *p_summe = *p_zahl1 + *p_zahl2;
                if (*p_summe == *p_u_eingabe) ++*p_richtigeAntw;
                break;
.
.
.
so geht es weiter die operanten durch
.
.
.   
 }
    while (*p_summe == *p_u_eingabe);

    printf ("FALSCH!\n");
    printf ("Richtige Antwort: %.0f\n", *p_summe);
    printf ("Richtig Beantwortete Aufgaben: %d\n", *p_richtigeAntw);
    printf ("Zum Beenden ENTER druecken\n");
    getch();

    return 0;
}

ich möchte die zeit messen die der benutzer braucht um zu rechnen und seine eingabe zu machen.

ich habe das mal so probiert

case 1: /*Addition */
            {
                printf ("\n%.0f + %.0f = ", *p_zahl1, *p_zahl2);
                time_t msec = time(NULL);
                scanf ("%f", &*p_u_eingabe);
                *p_zeit += msec
                *p_summe = *p_zahl1 + *p_zahl2;
                if (*p_summe == *p_u_eingabe) ++*p_richtigeAntw;
                break;

klappt aber nicht weil msec vorher nicht deklariert wurde
und wenn ich msec als long int mit den anderen variablen deklariere dann wird 38860452 ausgegeben.

ich hoffe das reicht oder solls der komplette code sein?


----------



## deepthroat (10. Oktober 2007)

Senfy hat gesagt.:


> ich habe das mal so probiert
> 
> case 1: /*Addition */
> {
> ...


Nee, im Grunde hätte auch der relevante letzte Teil ausgereicht.

Hast du dir denn mal die Funktion time angeschaut, was die eigentlich ermittelt bzw. zurückgibt? Die Funktion gibt die Systemzeit zurück und zwar in Sekunden die seit der "Epoche" vergangen sind. Die Zeit läuft natürlich kontinuierlich weiter. Um zu wissen wieviel Zeit während einer Aufgabe vergangen ist, muss man natürlich vorher die time Funktion aufrufen (Startzeit) und danach (Endzeit). Die vergangene Zeit ist dann die Differenz (Endzeit - Startzeit).

Da die time Funktion nur sekundengenau arbeitet ist es wahrscheinlich unsinnig das in msec umzurechnen.

Manchmal hilft die Suche: http://www.willemer.de/informatik/cpp/timelib.htm

Gruß


----------

