Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Programmazione C] Cronometro in ANSI C

    Salve a tutti, vorrei una piccola mano con del codice in ANSI C.
    Praticamente dovrei creare un cronometro che una volta fermato, dopo averlo avviato, mi restituisca il tempo e me lo salvi in un file.
    codice:
    void stopwatch(){    time_t start_time;
        time_t stop_time;
        int hour,h = 0;
        int sec;
        int min,m = 0;
        int s=0;
        int n=0;
        int c;
        CLEAR();
        int id=0;
        char weather[15];
        FILE *fp;
        fp=fopen(file3,"a");
        printf("Write Pilot ID: ");
        scanf("%d", &id);
        printf("\nInsert weather conditions: ");
        scanf("%s",weather);
        CLEAR();
        printf("\tPress any number to START stopwatch\n");
        scanf("%d",&n);
    
    
        while(( c = getchar() ) != '\n' && c != EOF );
        start_time = time(NULL);
    
    
        do{
            printf("\tPress the Enter Key to Stop the stopwatch");
        }while(( c = getchar() ) != '\n' && c != EOF );
        stop_time = time(NULL);
    
    
        sec = difftime( stop_time , start_time );
    
    
        while( sec >= 60 ){
            min++;
            sec = sec - 60;
        }
        while( min >= 60){
            hour++;
            min = min -60;
        }
                CLEAR();
    
    
    
    
        fprintf(fp,"%d\t%s\t%02d:%02d:%02d\n",id,weather,hour,min,sec);
        printf("Pilot ID: %d\n",id);
        printf("Weather: %s\n",weather);
        printf("Time: %02d:%02d:%02d\n",hour,min,sec);
    
    
    fclose(fp);
    
    
    }
    Questo è il codice, ma non mi visualizza il cronometro in tempo reale. Ho provato ad aggiungerlo, ma non saprei come bloccarlo senza utilizzare librerie non standard.
    Qualcuno potrebbe aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Ti do qualche consiglio, il programma postato non va bene se devi stampare a video il tempo ad intervalli regolari, visto che calcola il tempo solo dopo aver fermato il "cronometro".

    Devi calcolare il tempo di un secondo, avendo lo scorrere dei secondi è facile costruirsi un orologio-cronometro.

    Un problemino, senza usare librerie esterne, la stampa in output del c è limitata, stampa una riga dopo l'altra, quindi per stampare una sola informazione aggiornata bisognerebbe cancellare lo schermo con system("cls") in ambiente dos-windows, ma questo pone problemi, quindi o prevedere la stampa di un certo numero di righe, e poi effettuare una chiamata "cls" o ...


    per calcolare lo scorrere di un secondo dovresti usare un codice simile a questo


    codice:
    
    
    do{  
              time(&stop);// nel loop acquisisco sempre il nuovo tempo
              if( difftime (stop, start)>=1){// Se è passato un secondo
              
                  
                     secondi++;
                  
                     time(&start); // azzero la differenza tra stop e start, portandoli allo stesso valore
                } // end if  
     }while(1);
    Tecnologia

  3. #3
    Ciao e grazie mille per il consiglio. Per quanto riguarda il problema del dover cancellare lo schermo ogni secondo ho risolto con
    codice:
    #ifdef WIN32#define CLEAR() (system("cls"))#else#define CLEAR() (system("clear"))#endif
    Così con una semplice chiamata di CLEAR() dovrebbe funzionare sia su ambiente Linux che Dos-Windows.Ora il problema rimane dover bloccare il cronometro e stampare a video il tempo. Ho provato con kbhit() ma fa parte di conio.h e non è una libreria standard.

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    Ciao, perché devi usare solo la libreria standard del C, per renderlo portabile sia su linux che Windows, o perché ti è stato proibito di usare altro?
    Secondo me, per stampare in Output e contemporaneamente "gestire" la tastiera, ho usi funzioni o usi thread, e tutti i metodi non fanno parte della libreria standard.

    Per rendere il programma portabile, potresti usare i thread e il pre processore come fai con system(), includi header necessario , e imposti una costante di selezione, if(COSTANTE==1) funzioneThreadWindows() else funzioneThreadLinux()...
    Tecnologia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.