如何使我的时钟应用程序工作

时间:2016-06-02 15:06:38

标签: c

我想制作一个像大多数计时器应用程序或鸡蛋计时器一样在用户输入上运行的计时器。我编写了代码,但我想出了垃圾值和几乎没有工作的代码。请帮忙!

#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();
  }

2 个答案:

答案 0 :(得分:0)

主要问题在于

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

这里,你为printf()提供了三个格式说明符,但是你只传递了两个参数!这会调用undefined behavior

引用C11,章节§7.21.6.1, fprintf()

  

fprintf函数将输出写入stream指向的流,并受控制   format指向的字符串,指定后续参数的方式   转换为输出。 如果format的参数不足,则行为为   未定义。

话虽这么说,我认为你应该重新设计这种方法。这应该是倒计时计时器,所以从给定的值开始,并尝试为所有变量达到零。应该有减量,而不是增量

此外,不要期望用户遵守屏幕上的说明(如> (max 59!)),自己验证输入。不要忘记检查scanf()的返回值。

答案 1 :(得分:0)

现在虽然我知道这不是完美的答案。这就是我能想到的那种“接近”我想要的东西。感谢所有帮助过的人。这是我想出的:(注意:虽然这不是严格的倒计时应用程序!) 我希望听到你们的批评更多!再次感谢!

#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();
}