weixin_45881031 2020-06-02 17:11 采纳率: 0%
浏览 195

我用C语言写了一个闹钟程序但是总是死循环?

本人用C语言写了一个闹钟的程序但是总是陷入死循环出不来?
程序复制如下,请求大神解答。
mian.c函数
#include
#include
#include "Alarm.h"
int main()
{ /*
实现功能闹钟如下:
1.到了输入的时间可以发出提示。
*/
shuru();
action();
return 0;
}
头文件Alarm.h
#ifndef ALARM_H_INCLUDED
#define ALARM_H_INCLUDED
#include
#include
#include
#include
static int nian;
static int yue;
static int ri;
static int shi;
static int fenzhong;
static int miao;
void shuru();//输入希望提醒您的时间
void action();//判断并做出提醒动作
#endif // ALARM_H_INCLUDED
实现函数shixian.c
#include "Alarm.h"
static int nian;
static int yue;
static int ri;
static int shi;
static int fenzhong;
static int miao;
//static int index=0;//此变量为参照物以确定是否需要发声
void shuru()
{
printf("请输入希望提醒您的时间。\n");//提示用户输入提醒的时间
printf("请输入年份\n");
scanf("%d",&nian);//希望提醒的年份
if((nian<=12)||(nian>=1))
{printf("输入正确。\n");}
else{printf("输入错误。\n");}
printf("请输入月份\n");
scanf("%d",&yue);//希望提醒的月份
if((yue<=12)||(nian>=1))
{printf("输入正确。\n");}
else{printf("输入错误。\n");}
printf("请输入日\n");
scanf("%d",&ri);//希望提醒的日
if((ri<=30)||(ri>=1))
{printf("输入正确。\n");}
else{printf("输入错误。\n");}
printf("请输入时\n");
scanf("%d",&shi);//希望提醒的时
if((shi<=24)||(shi>=1))
{printf("输入正确。\n");}
else{printf("输入错误。\n");}
printf("请输入分钟\n");
scanf("%d",&fenzhong);//希望提醒的分钟
if((ri<=60)||(ri>=1))
{printf("输入正确。\n");}
else{printf("输入错误。\n");}
printf("请输入秒\n");
scanf("%d",&miao);//希望提醒的秒
if((miao<=60)||(miao>=1))
{printf("输入正确。\n");}
else{printf("输入错误。\n");}
printf("%d年%d月%d日%d时%d分%d秒\n",nian,yue,ri,shi,fenzhong,miao);
return 0;
}
action()//与系统给出时间进行对照没成功一次index加一,如果最后数值为6则发出声音
{ //int index=0;//此变量为参照物以确定是否需要发声
time_t timep;
struct tm *p;
time (&timep);
p=gmtime(&timep);
int a=8+p->tm_hour;
int index=0;//此变量为参照物以确定是否需要发声
do{
//for(index=0;index!=6;)
//index=0;//如果没有达到条件将index置零重新开始。
printf("%d\n",p->tm_sec); /
获取当前秒*/
printf("%d\n",p->tm_min); /*获取当前分*/
printf("%d\n",8+p->tm_hour);/*获取当前时,这里获取西方的时间,刚好相差八个小时*/
printf("%d\n",p->tm_mday);/*获取当前月份日数,范围是1-31*/
printf("%d\n",1+p->tm_mon);/*获取当前月份,范围是0-11,所以要加1*/
printf("%d\n",1900+p->tm_year);/*获取当前年份,从1900开始,所以要加1900*/
//printf("%d",miao);
if(p->tm_sec==miao){
index++;//秒对上了,index加一。
}
if(p->tm_min==fenzhong){
index++;//分钟对上了index加一。
}
if(a==shi){
index++;//小时对上了,index加一。
}
if(p->tm_mday==ri){
index++;//天对上了,index加一。
}
if(p->tm_mon==yue){
index++; //月对上了index加一。
}
if(p->tm_year==nian){
index++;//年对上了,index加一。
}
if(index!=6){
printf("提醒的时间未到请等待。\n");
}
if(index==6){
goto cichu1;//如果index=6则条件达成跳出到cichu1继续执行。
}
index=0;//如果没有达到条件将index置零重新开始。
}
while(index!=6);//index不等于6继续执行循环对时,index=6跳出
{
cichu1:
printf("时间到了。\n");
printf("\a");
//printf("%d\n",p->tm_sec); /*获取当前秒*/
//printf("%d\n",p->tm_min); /*获取当前分*/
//printf("%d\n",8+p->tm_hour);/*获取当前时,这里获取西方的时间,刚好相差八个小时*/
//printf("%d\n",p->tm_mday);/*获取当前月份日数,范围是1-31*/
//printf("%d\n",1+p->tm_mon);/*获取当前月份,范围是0-11,所以要加1*/
//printf("%d\n",1900+p->tm_year);/*获取当前年份,从1900开始,所以要加1900*/
}
return 0;
}

  • 写回答

1条回答 默认 最新

  • bobo415 2020-06-02 17:31
    关注

    每次进入循环,先要把index要归零啊

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!