user-0 提问: 初学者求帮看代码哪里有问题

回复:
user: user-0
content: 引用 14 楼 ilikehigame 的回复:[quote=引用 楼主 q2953346886 的回复:] 原题是让编一个简单的日期计算器 输入年、月、日，输出该日期的前一天和后一天 本渣编了半天，编译显示没错误，但是运行了也没反应。代码如下： #include <stdio.h> void main() {  int year,month,day;  printf("请输入一个年、月、日：\n");  scanf("%d,%d,%d",&year,&month,&day);   if(month==5||month==7||month==10)    {  if(day==31)  printf("前一天：%d年%d月30日,后一天：%d年%d月1日",year,month,month+1);       else if(day==1)  printf("前一天：%d年%d月30日,后一天：%d年%d月2日",year,month-1,month);      else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1);    }     else if(month==8) 	{ 	   if(day==31)  printf("前一天：%d年8月30日,后一天：%d年9月1日",year,year);        else if(day==1)  printf("前一天：%d年7月31日,后一天：%d年8月2日",year,year); 	}        else if(month==4||month==6||month==9||month==11) 	   {  if(day==30)  printf("前一天：%d年%d月29日,后一天：%d年%d月1日",year,month,month+1);             else if(day==1)  printf("前一天：%d年%d月31日,后一天：%d年%d月2日",year,month-1,month);               else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1); 	   } 	   else if(month==12)    { if(day==31) printf("前一天：%d年12月30日,后一天：%d年1月1日",year,year+1);     if(day==1) printf("前一天：%d年11月30日,后一天：%d年12月2日",year,year);    else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1);   }     else if(month==1)    { if(day==31) printf("前一天：%d年1月30日,后一天：%d年2月1日",year,year);     else if(day==1) printf("前一天：%d年12月31日,后一天：%d年1月2日",year-1,year);    else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1);   } 	   else  	   { 		   if(year%4==0&&year%100!=0||year%400==0) 		   { if(month==2) 		   {                if(day==29) printf("前一天：%d年2月28日,后一天：%d年3月1日",year,year);                  else if(day==1) printf("前一天：%d年1月31日,后一天：%d年2月2日",year,year);                else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1); 		   } 		   } 		      else if(month==3) 			  { 			  if(day==31) printf("前一天：%d年3月30日,后一天：%d年4月1日",year,year);               else if(day==1) printf("前一天：%d年2月29日,后一天：%d年3月2日",year,year);               else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1); 			  } 			   		   else  		   { 		   if(month==2) 		   {                if(day==28) printf("前一天：%d年2月27日,后一天：%d年3月1日",year,year);                  else if(day==1) printf("前一天：%d年1月31日,后一天：%d年2月2日",year,year);                else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1); 		   } 		      else if(month==3) 			  { 			  if(day==31) printf("前一天：%d年3月30日,后一天：%d年4月1日",year,year);               else if(day==1) printf("前一天：%d年2月28日,后一天：%d年3月2日",year,year);               else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1); 		    			  }       	 		} 	   }  }  没什么问题，只是你输入的格式不对，因为你写的是scanf("%d,%d,%d",&year,&month,&day); 所以输入的格式是：2004,2,28回车就对了！！！！数字中间要用逗号隔开[/quote]真是这个问题~我想了一天也没想明白多谢了。

user: user-1
content: 引用 楼主 q2953346886 的回复:原题是让编一个简单的日期计算器 输入年、月、日，输出该日期的前一天和后一天 本渣编了半天，编译显示没错误，但是运行了也没反应。代码如下： #include <stdio.h> void main() {  int year,month,day;  printf("请输入一个年、月、日：\n");  scanf("%d,%d,%d",&year,&month,&day);   if(month==5||month==7||month==10)    {  if(day==31)  printf("前一天：%d年%d月30日,后一天：%d年%d月1日",year,month,month+1);       else if(day==1)  printf("前一天：%d年%d月30日,后一天：%d年%d月2日",year,month-1,month);      else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1);    }     else if(month==8) 	{ 	   if(day==31)  printf("前一天：%d年8月30日,后一天：%d年9月1日",year,year);        else if(day==1)  printf("前一天：%d年7月31日,后一天：%d年8月2日",year,year); 	}        else if(month==4||month==6||month==9||month==11) 	   {  if(day==30)  printf("前一天：%d年%d月29日,后一天：%d年%d月1日",year,month,month+1);             else if(day==1)  printf("前一天：%d年%d月31日,后一天：%d年%d月2日",year,month-1,month);               else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1); 	   } 	   else if(month==12)    { if(day==31) printf("前一天：%d年12月30日,后一天：%d年1月1日",year,year+1);     if(day==1) printf("前一天：%d年11月30日,后一天：%d年12月2日",year,year);    else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1);   }     else if(month==1)    { if(day==31) printf("前一天：%d年1月30日,后一天：%d年2月1日",year,year);     else if(day==1) printf("前一天：%d年12月31日,后一天：%d年1月2日",year-1,year);    else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1);   } 	   else  	   { 		   if(year%4==0&&year%100!=0||year%400==0) 		   { if(month==2) 		   {                if(day==29) printf("前一天：%d年2月28日,后一天：%d年3月1日",year,year);                  else if(day==1) printf("前一天：%d年1月31日,后一天：%d年2月2日",year,year);                else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1); 		   } 		   } 		      else if(month==3) 			  { 			  if(day==31) printf("前一天：%d年3月30日,后一天：%d年4月1日",year,year);               else if(day==1) printf("前一天：%d年2月29日,后一天：%d年3月2日",year,year);               else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1); 			  } 			   		   else  		   { 		   if(month==2) 		   {                if(day==28) printf("前一天：%d年2月27日,后一天：%d年3月1日",year,year);                  else if(day==1) printf("前一天：%d年1月31日,后一天：%d年2月2日",year,year);                else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1); 		   } 		      else if(month==3) 			  { 			  if(day==31) printf("前一天：%d年3月30日,后一天：%d年4月1日",year,year);               else if(day==1) printf("前一天：%d年2月28日,后一天：%d年3月2日",year,year);               else printf("前一天：%d年%d月%d日,后一天：%d年%d月%d日",year,month,day-1,year,month,day+1); 		    			  }       	 		} 	   }  }  没什么问题，只是你输入的格式不对，因为你写的是scanf("%d,%d,%d",&year,&month,&day); 所以输入的格式是：2004,2,28回车就对了！！！！数字中间要用逗号隔开

user: user-0
content: 引用 11 楼 q2953346886 的回复:[quote=引用 9 楼 hhhhhhhhhhkkkkkkkkkk 的回复:] 你运行我的代码看一下，那两个getchar就像我那样放，目的是不让控制台显示一下就退了。下面是我代码运行的一些结果：  图片没了[/quote] 这是刚注册的号，我这里看显示图片已删除，麻烦复制一下改完后的代码吧，麻烦您了。

user: user-2
content: 我这能看到图片的啊，是不是你级不够？

user: user-0
content: 引用 9 楼 hhhhhhhhhhkkkkkkkkkk 的回复:你运行我的代码看一下，那两个getchar就像我那样放，目的是不让控制台显示一下就退了。下面是我代码运行的一些结果：  图片没了

user: user-2
content: 润年是用的你的算法，好像结果不对。

user: user-2
content: 你运行我的代码看一下，那两个getchar就像我那样放，目的是不让控制台显示一下就退了。下面是我代码运行的一些结果：

user: user-0
content: 引用 7 楼 r_Jimy 的回复:一般只要在程序返回前加个getchar或scanf从控制台读数据即可，如果程序只在最后返回，加在最后就可以了 然后你随意输入个字符上程序读到数据，它就return了大学刚学c，表示不太懂，我把两个getchar加到最后一个大括号前然后运行后还是直接显示“press any key to continue”。到底应该加到哪里啊

user: user-3
content: 一般只要在程序返回前加个getchar或scanf从控制台读数据即可，如果程序只在最后返回，加在最后就可以了 然后你随意输入个字符上程序读到数据，它就return了

user: user-0
content: 引用 5 楼 r_Jimy 的回复:[quote=引用 4 楼 hhhhhhhhhhkkkkkkkkkk 的回复:] 如果在VS下调试的话，最后那要两个getchar();才能看到显示的结果，否则控制台显示一下就关闭了，根本来不及看结果。第一个getchar();是用来接收scanf输入完成后敲的那一下回车键的。第二个才是暂停用的。 楼主说的没反应应是这样的情况了[/quote]我使用visual c++6.0 运行的，另外求问一下两个getchar 应该加到哪里？

user: user-3
content: 引用 4 楼 hhhhhhhhhhkkkkkkkkkk 的回复:如果在VS下调试的话，最后那要两个getchar();才能看到显示的结果，否则控制台显示一下就关闭了，根本来不及看结果。第一个getchar();是用来接收scanf输入完成后敲的那一下回车键的。第二个才是暂停用的。 楼主说的没反应应是这样的情况了

user: user-2
content: 如果在VS下调试的话，最后那要两个getchar();才能看到显示的结果，否则控制台显示一下就关闭了，根本来不及看结果。第一个getchar();是用来接收scanf输入完成后敲的那一下回车键的。第二个才是暂停用的。

user: user-4
content: 没有问题呀！ 输入 1990,1,1输出为 前一天：1989年12月31日,后一天：1990年1月2日  只是看起来闰年的处理似乎有点问题。

user: user-2
content: 运行了下，是有反应的，结果也是正确的。不过你这写法太难看了。下面是我写的：  #include"stdio.h" void main() { 	int year, month, day; 	printf("请输入一个年、月、日：\n"); 	scanf_s("%d,%d,%d", &year, &month, &day); 	if (!((month >= 1) && (month <= 12))) 	{ 		printf("输入月错误"); goto _exit; 	}  	int monDay[12],preYear,preMon,preDay,afterYear,afterMon,afterDay; 	bool dYear = false; 	monDay[0] = monDay[2] = monDay[4] = monDay[6] = monDay[7] = monDay[9] = monDay[11]=31; 	monDay[3] = monDay[5] = monDay[8] = monDay[10] = 30; 	monDay[1] = 28; 	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) 	{ 		dYear = true; monDay[2] = 29; 	} 	if (!((day >= 1) && (day <= monDay[month-1]))) 	{ 		printf("输入日错误"); goto _exit; 	} 	//计算前一天： 	preDay = day - 1; 	preMon = month; 	preYear = year; 	if (preDay < 1) 	{ 		preMon--; 		if (preMon < 1) 		{ 			preMon = 12; 			preYear--; 		} 		preDay = monDay[preMon-1]; 	} 	char*beforeStr = ""; 	if (preYear < 0){ beforeStr = "公元前"; preYear = -preYear; } 	printf("前一天：%s%d年%d月%d日\n", beforeStr,preYear, preMon, preDay); 	//计算后一天： 	afterDay = day + 1; 	afterMon = month; 	afterYear = year; 	if (afterDay > monDay[month-1]) 	{ 		afterDay = 1; afterMon++; 	} 	if (afterMon > 12) 	{ 		afterMon = 1; 		afterYear++; 	} 	beforeStr = ""; 	if (afterYear<0){ beforeStr = "公元前"; afterYear = -afterYear; } 	printf("后一天：%s%d年%d月%d日\n", beforeStr, afterYear, afterMon, afterDay); _exit: 	getchar(); 	getchar(); }

user: user-0
content: 有的地方少了接个year，但是貌似这个不是主要问题