| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1605 人关注过本帖
标题:[求助]这段程序编译后运行时,如输入点 . 则会被printf函数刷屏,为什么?
只看楼主 加入收藏
zhulaoda
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-9-30
收藏
 问题点数:0 回复次数:10 
[求助]这段程序编译后运行时,如输入点 . 则会被printf函数刷屏,为什么?

/* Note:Your choice is C IDE */
#include "stdio.h"
main()
{
int y,m,d,d2,u,jin=0,s=0; /*定义年月日,和变量日期*/
int m3,m4,m5,m6,m7,m8,m9,m10,m11,m12;
start:;
m3=59,m4=90,m5=120,m6=151,m7=181,m8=212,m9=243,m10=273,m11=304,m12=334;
printf("输入生产年份(2005-2011年):\n");
scanf("%d",&y);
if (y<2005||y>2011)
{ while (s<1)
{printf("您输入年份有误,",s++);goto start;}
{printf("你是第一天玩电脑还是脑子有毛病啊,年份都不会输入?\a请再",s=0);goto start;}
}
else if(y==2005)
jin=6;
else if(y==2006)
jin=0;
else if(y==2007)
jin=1;
else if(y==2008)
{jin=2; m3=60,m4=91,m5=121,m6=152,m7=182,m8=213,m9=244,m10=274,m11=305,m12=335;}
else if(y==2009)
jin=4;
else if(y==2010)
jin=5;
else if(y==2011)
jin=6;
start2:;
printf("输入%d年的生产月份:\n\n",y);
scanf("%d",&m);
if (m<0||m>12) /*琐定一年12个月*/
{ while (s<1)
{printf("您输入月份有误,请重新",s++);goto start2;}
printf("你是第一天玩电脑还是脑子有毛病啊,月份都不会输入?\a请再",s=0);goto start2;
}
else
switch (m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: d=31; break;
case 4:
case 6:
case 9:
case 11: d=30; break;
case 2:
if((y%4!=0)||(y%100==0)&&(y%400!=0))
d=28;
else d=29;
m3=60+jin,m4=91+jin,m5=121+jin,m6=152+jin,m7=182+jin;
m8=213+jin,m9=244+jin,m10=274+jin,m11=305+jin,m12=335+jin;
break; /* 是闰年2月要加一天*/
default :printf("错误,请重新输入\n\n");
}
printf("%d年的%d月有%d天\n\n",y,m,d); /*自动识别2006年某月的天数*/
goto start3;

start3:;
printf("输入%d年%d月的生产日期:\n\n",y,m);
scanf("%d",&d2);
if (0>d2||d<d2) /*与当月天数比较,纠正用户输入错误*/
{ while (s<1)
{printf("您输入日期有误,请重新",s++);goto start3;}
{printf("你是第一天玩电脑还是脑子有毛病啊,生产日期都不会输入?\a请再",s=0);goto start3;}
}
else
switch (m) /*最菜的计算列表,请高手指点有没有更好的办法*/
{
case 1: u=(d2+jin)/7+(((d2+jin)%7)>0);break;
case 2: u=(d2+31+jin)/7+(((d2+31+jin)%7)>0);break;
case 3: u=(d2+m3+jin)/7+(((d2+m3+jin)%7)>0);break;
case 4: u=(d2+m4+jin)/7+(((d2+m4+jin)%7)>0);break;
case 5: u=(d2+m5+jin)/7+(((d2+m5+jin)%7)>0);break;
case 6: u=(d2+m6+jin)/7+(((d2+m6+jin)%7)>0);break;
case 7: u=(d2+m7+jin)/7+(((d2+m7+jin)%7)>0);break;
case 8: u=(d2+m8+jin)/7+(((d2+m8+jin)%7)>0);break;
case 9: u=(d2+m9+jin)/7+(((d2+m9+jin)%7)>0);break;
case 10: u=(d2+m10+jin)/7+(((d2+m10+jin)%7)>0);break;
case 11: u=(d2+m11+jin)/7+(((d2+m11+jin)%7)>0);break;
case 12: u=(d2+m12+jin)/7+(((d2+m12+jin)%7)>0);break;
}
start4:;
printf("%d年%d月%d日是%d年的第 %d 周,感谢使用本软件!\n\n",y,m,d2,y,u);
goto start;
}

这段程序编译后运行时,如输入点 . 则会被printf函数刷屏,为什么?
如何纠正错误呢?

[此贴子已经被作者于2007-10-2 0:32:51编辑过]

搜索更多相关主题的帖子: printf 函数 编译 运行 
2007-10-01 23:42
h28754532
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-9-29
收藏
得分:0 

拜读中...
回三楼,乍可能啊?

[此贴子已经被作者于2007-10-2 0:25:21编辑过]

2007-10-02 00:15
zhulaoda
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-9-30
收藏
得分:0 

goto 语句本身就是个地雷,没办法,学汇编转过来的,已经深受其害,惯用了,555555...
怎么办啊?没的解了?难道scanf("%d",&y);函数无法控制点 . 的输入?所以一顿狂printf ?
我要疯了~

[此贴子已经被作者于2007-10-2 0:23:46编辑过]

2007-10-02 00:20
hangeng
Rank: 2
等 级:论坛游民
帖 子:424
专家分:39
注 册:2007-7-23
收藏
得分:0 

我编译过了
输入
.

确实会不停的执行
printf("你是第一天玩电脑还是脑子有毛病啊,年份都不会输入?\a请再",s=0);

并且lz的\a给我很大的震动


  雨水冲不进窗来,在玻璃上痛哭。但它至少奋斗过。
2007-10-02 20:12
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
楼主学学数组吧
2007-10-02 20:42
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
int m3,m4,m5,m6,m7,m8,m9,m10,m11,m12;
定义成这样的确是没学过数组的.

倚天照海花无数,流水高山心自知。
2007-10-02 20:47
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 
写的不错,题目完种解
只要自己肯去做
肯定能学不少

You have lots more to work on! Never give up!c language!
2007-10-02 21:36
zhulaoda
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-9-30
收藏
得分:0 

自学的,刚学语句及用法,数组明天再学!谢谢大家关心!
我们工厂产品出货填写的是生产周,生产部一楼和三楼由于计算方法不统一,所以我才想到做这个程序。

[此贴子已经被作者于2007-10-2 22:46:31编辑过]

2007-10-02 22:40
provoke
Rank: 2
来 自:广州
等 级:新手上路
威 望:5
帖 子:175
专家分:0
注 册:2007-6-14
收藏
得分:0 

用do-while就可以省去用 goto 的麻烦,例如获取月份:

do{
printf("请输入月份:");
scanf("%d",&m);
}while(m<0||m>12);

其实只要结合if等条件判断语句灵活使用,goto 语句并不像一般人不加思索就随口而出所说的那样逻辑性差或者怎样不好。我就非常喜欢用 goto 语句,不过不适宜过多使用,多了万一出错可能就会很难排错。

爱我至爱,至死不渝!
2007-10-03 00:51
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
如果学了C++,你就会明白goto语句可怕的地方,即使你的程序逻辑上正确
轻的话就是内存泄露,重的就会崩溃
2007-10-03 01:10
快速回复:[求助]这段程序编译后运行时,如输入点 . 则会被printf函数刷屏,为什 ...
数据加载中...
 
   



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

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