2016-06-02 15 views
0

Ich wollte einen Timer, der auf Benutzereingabe lief wie die meisten Timer-Anwendungen oder eine Eieruhr. Ich schrieb den Code, aber ich komme mit Müll-Werte und kaum funktionierenden Code. Bitte helfen Sie!Wie ich meine Uhr App arbeiten lassen

#include<stdio.h> 
#include<conio.h> 
#include<time.h> 
#include<stdlib.h> 

main(){ 
    int h=0; 
    int s=0; 
    int m=0; 
    printf("Please enter the time you want for the timer."); 
    printf("Please enter how many hours you want for the timer.(max 24!)"); 
    scanf("%d",&h); 
    printf("Please enter how many minutes you want for the timer.(max 59!)"); 
    scanf("%d",&m); 
    printf("Please enter how many seconds you want for the timer.(max 59!)"); 
    scanf("%d",&s); 

    while (s<=60){ 

     printf(" %d hours %d minutes and %d seconds \n", m ,s);//gives the  countdown output 
     sleep(1); //for delaying in seconds. 
     s++;// adds one to the second counter 

     if(s==60){ 
     m++;//adds one to the second counter when seconds reach 60 
     s=0;//resets seconds value to 0. 
    } 
     if(m==60){ 
     h++; 
     m=0; 
    } 
     if(h==24){ 
     printf("The timer has reached Max output!\n"); 
     break; 
     } 
    } 



    getch(); 
    } 
+0

Debuggen. Beachten Sie, dass die Schleifenbedingung "s <= 60" nach dem Eintritt in die Schleife nicht wahr ist, da wenn "s == 60" wahr wird, "s" auf "0" gesetzt wird. – MikeCAT

+0

Sie haben * undefined behaviour * aufgerufen, indem Sie nicht genügend Argumente für den Formatbezeichner für 'printf()' angegeben haben. – MikeCAT

Antwort

0

Das Hauptproblem ist in

printf(" %d hours %d minutes and %d seconds \n", m ,s); 

hier haben Sie drei Formatbezeich zu printf() geliefert, aber sie passieren nur zwei Argumente !! Dies ruft undefined behavior auf.

C11 Zitiert, Kapitel §7.21.6.1, fprintf()

Die fprintf Funktion schreibt Ausgabe an den Strom von spitz stream, unter Kontrolle der Zeichenfolge durch format hingewiesen, dass, wie nachfolgende Argumente spezifiziert, sind für die Ausgabe konvertiert. Wenn nicht genügend Argumente für die format vorliegen, ist das Verhalten undefined.

Das gesagt, ich denke, Sie sollten den Ansatz neu gestalten. Dies sollte ein Countdown Timer sein, also beginnen Sie mit den angegebenen Werten und versuchen Sie Null für alle Variablen zu erreichen. Es sollte Dekremente, nicht Inkremente sein.

Auch nicht erwarten Benutzer durch die Anweisungen auf dem Bildschirm (wie > (max 59!)) zu halten, bestätigen die Eingabe selbst. Vergessen Sie nicht, auch den Rückgabewert von scanf() zu überprüfen.

0

Jetzt weiß ich zwar, dass dies nicht die perfekte Antwort ist. Das könnte ich mir vorstellen, das "nah" an dem ist, was ich wollte. Danke an alle, die geholfen haben. Hier ist, was ich gefunden habe: (HINWEIS: Während dies nicht unbedingt eine Countdown-App ist!) Ich hoffe, mehr Kritik von Ihnen zu hören! Danke noch einmal!

#include<stdio.h> 
#include<conio.h> 
#include<time.h> 
#include<stdlib.h> 

main(){ 
    int input; 
    int s=0; 
    int m=0; 


    printf("Please enter how many minutes you want for the timer."); 
    scanf("%d",&input); 

    while (s<=60){ 
     /*no need for fflush if you have new line*/ 
     printf("%d minutes and %d seconds \n",m ,s);//gives the countdown output 
     sleep(1); //for delaying in seconds. 
     s++;// adds one to the second counter 

     if(s==60){ 
     m++;//adds one to the second counter when seconds reach 60 
     s=0;//resets seconds value to 0. 
    } 

     if(m==input){ 
     printf("The timer has reached Max output!\n"); 
     break; 
     } 
    } 



     getch(); 
} 
Verwandte Themen