| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 477 人关注过本帖
标题:输入数据的问题
只看楼主 加入收藏
heecn
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-6-30
收藏
 问题点数:0 回复次数:5 
输入数据的问题

下面是我编写的求出今天是今年的第几天的程序,运行一切正常。可是为什么我输入一个字母的时候就会造成死循环呢?想不通~~~~哪位朋友讲解一下,谢谢
#include<stdio.h>
struct date
{
int year;
int month;
int day;
}today;
int main()
{
int i,month_days,total_days=0;
loop:printf("请输入今天的日期:");
scanf("%d%d%d",&today.year,&today.month,&today.day);
if(today.year<0||today.month>12||today.month<=0||today.day<=0||today.day>31) goto loop;
printf("今天是 %d-%d-%d\n",today.year,today.month,today.day);
for(i=1;i<today.month;i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) month_days=31;
else
if(i==4||i==6||i==9||i==11) month_days=30;
else
if(today.year%400==0||today.year%4==0&&today.year%100!=0) month_days=29;
else month_days=28;
total_days+=month_days;
}
total_days+=today.day;
printf("今天是%d的第%d天!\n",today.year,total_days);
getch();
}

[此贴子已经被作者于2007-6-9 3:25:11编辑过]

搜索更多相关主题的帖子: today int month 数据 
2007-06-09 03:20
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 

#include<stdio.h>
struct date
{
int year;
int month;
int day;
}today;
int main()
{
int i,month_days,total_days=0;
loop:printf("请输入今天的日期:");
scanf("%d%d%d",&today.year,&today.month,&today.day);
if(today.year<0||today.month>12||today.month<=0||today.day<=0||today.day>31) { while(getchar()!=10;goto loop;}/*清除下缓冲流*/
printf("今天是 %d-%d-%d\n",today.year,today.month,today.day);
for(i=1;i<today.month;i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) month_days=31;
else
if(i==4||i==6||i==9||i==11) month_days=30;
else
if(today.year%400==0||today.year%4==0&&today.year%100!=0) month_days=29;
else month_days=28;
total_days+=month_days;
}
total_days+=today.day;
printf("今天是%d的第%d天!\n",today.year,total_days);
getch();
}

loop用--不好


偶是菜鸟鸟偶惧WHO?!!!!
2007-06-09 13:05
heecn
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-6-30
收藏
得分:0 
不明白哦~    ~
2007-06-09 23:36
chyhome
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-5-13
收藏
得分:0 
我认为是这样的:输入字母a,程序判断“非法”(不是INT型),结束输入赋值,这时year、month、day应为初始值0,满足判断条件,通过GOTO语句返回,再次进行输入,由于先前输入的字符a未被SCANF语句接收(在键盘缓冲区内),因此再次判断a字符位“非法”,重复不断循环。
解决方法:
改:if(today.year<0||today.month>12||today.month<=0||today.day<=0||today.day>31) goto loop;
位:if(today.year<0||today.month>12||today.month<=0||today.day<=0||today.day>31) {getchar(); goto loop;}



2007-06-10 02:17
heecn
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-6-30
收藏
得分:0 

谢谢 这样果然可以了。

2007-06-11 00:52
heecn
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-6-30
收藏
得分:0 
以下是引用chyhome在2007-6-10 2:17:01的发言:
我认为是这样的:输入字母a,程序判断“非法”(不是INT型),结束输入赋值,这时year、month、day应为初始值0,满足判断条件,通过GOTO语句返回,再次进行输入,由于先前输入的字符a未被SCANF语句接收(在键盘缓冲区内),因此再次判断a字符位“非法”,重复不断循环。
解决方法:
改:if(today.year<0||today.month>12||today.month<=0||today.day<=0||today.day>31) goto loop;
位:if(today.year<0||today.month>12||today.month<=0||today.day<=0||today.day>31) {getchar(); goto loop;}


十分感谢你的分析,也理解了。忠心祝愿你每天有一个好心情

2007-06-11 00:55
快速回复:输入数据的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024905 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved