有一道C语言的问题想请教一下大家,谢谢

程序如下:
struct time
{
int minute;
int second;
};
main()
{
int i,n;
struct time sum;
scanf("%d\n",&n);
for(i=0;i<n;i++);
{
sum.minute=11;
sum.second=0;
printf("11:00\n");
for(;;)
{
value(&sum);
if((sum.minute==0)&&(sum.second==0))
{
printf("time is over");
delay();
break;
}
if((sum.minute<10)&&(sum.second<10))
printf("0%d:0%d\n",sum.minute,sum.second);
if((sum.minute>=10)&&(sum.second<10))
printf("%d:0%d\n",sum.minute,sum.second);
if((sum.minute>=10)&&(sum.second>=10))
printf("%d:%d\n",sum.minute,sum.second);
if((sum.minute<10)&&(sum.second>=10))
printf("0%d:%d\n",sum.minute,sum.second);
}
}
}
int value(struct time *t)
{
if((t->minute!=0)&&(t->second==0))
{
t->minute--;
t->second=59;
delay();
}
if((t->minute!=0)&&(t->second!=0))
{
t->second--;
delay();
}
if((t->minute==0)&&(t->second!=0))
{
t->second--;
delay();
}
}
delay()
{
long int n;
for(n=0;n<90000000;n++);
}
这程序有三个小问题:
(一):这个程序应该在执行scanf("%d\n",&n)这条语句之后就应该显示时间的倒记时才对,可是不知道怎么搞的,这条语句执行过了,却还要再输入一个数字按回车才行,不知道哪里有问题,请指教.
(二):每一分钟的第59秒显示不出来,比如:时间到了02:00,下一次应该显示01:59才对,出乎意料的是它直接显示01:58,晕.
(三):我用scanf("%d\n",&n)这条语句是为了让倒记时重复几遍,用了for(;;)无限循环语句,用了break语句是让程序记时到0从无限循环语句中跳出来,再重新进行倒记时,break语句不是只能跳出它所在的那一层循环吗?然后再用 for(i=0;i<n;i++)循环重新倒记时,可是不行啊,记时到0整个程序就结束了.
请大家帮帮忙,献上50分,谢谢.

1.scanf("%d\n",&n)改成,scanf("%d",&n)
2. value函数应该改成
int value(struct time *t)
{
if((t->minute!=0)&&(t->second==0))
{
t->minute--;
t->second=59;
delay();
}
else
if((t->minute!=0)&&(t->second!=0))
{
t->second--;
delay();
}
else
if((t->minute==0)&&(t->second!=0))
{
t->second--;
delay();
}
}

原因是几个if是相互独立的
3. for (i=0;i<n;i++);
后面多了一个;
循环体就是一个分号(空语句)
所以相当于 执行n次空循环后
再执行后面的花括号里的计时语句
循环对计时的次数不起作用
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-12-09
#include "stdio.h"
#include "conio.h"

struct time
{
int minute;
int second;
};
main()
{
int i,n;
struct time sum;
printf("in put:");
scanf("%d",&n);//根据控制格式输入
for(i=0;i<n;i++)//改正的
{
sum.minute=11;
sum.second=0;
printf("11:00\n");
for(;;)
{
value(&sum);
if((sum.minute==0)&&(sum.second==0))
{
printf("time is over");
delay();
break;
}
if((sum.minute<10)&&(sum.second<10))
printf("0%d:0%d\n",sum.minute,sum.second);
if((sum.minute>=10)&&(sum.second<10))
printf("%d:0%d\n",sum.minute,sum.second);
if((sum.minute>=10)&&(sum.second>=10))
printf("%d:%d\n",sum.minute,sum.second);
if((sum.minute<10)&&(sum.second>=10))
printf("0%d:%d\n",sum.minute,sum.second);
}
}
}
int value(struct time *t)//改正了逻辑错误你以前没有 else程序会顺序执行的,所以没有59的出现
{
if((t->minute!=0)&&(t->second==0))
{
t->minute--;
t->second=59;
delay();
}
else
{
if((t->minute!=0)&&(t->second!=0))
{
t->second--;
delay();
}
else{
if((t->minute==0)&&(t->second!=0))
{
t->second--;
delay();
}
}
}
}
delay()
{
long int n;
for(n=0;n<90000000;n++);
}
相似回答