在C语言中,else不是与最近的一个if结合么?为何我这里不是

Quesiter 2014-11-13 08:07:01
#include<stdio.h>
int main(){
int year,month,day=0;
printf("input year,month:\n");
scanf("%d,%d",&year,&month);
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
day=31;
if(month==4||month==6||month==9||month==11)
day=30;
if(month==2 && (year%4==0 && year%100!=0 || year%400==0))
day=29;
else day=28;
printf("days=%d",day);
return 0;
}


在执行过程中,总会执行到day=28,输出结果于是总是28.
这段代码来自《C语言编程技巧分析》(清华大学出版社 高禹 主编 2014年1月第一版)
不要改成if-else if,我会那种方法,只想知道这段代码为何总执行else
...全文
587 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
luckylucky028 2014-11-17
  • 打赏
  • 举报
回复
#include<stdio.h> int main(){ int year,month,day=0; printf("input year,month:\n"); scanf("%d,%d",&year,&month); if(month==2 && (year%4==0 && year%100!=0 || year%400==0)) day=29; else day=28; if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) day=31; if(month==4||month==6||month==9||month==11) day=30; printf("days=%d",day); return 0; } 非得要这样就把润年的放在前面
Troi 2014-11-16
  • 打赏
  • 举报
回复
多个条件语句换成else if 比较符合逻辑
爱生活爱Coding 2014-11-15
  • 打赏
  • 举报
回复
LZ顺序语句和条件语句没学好`
zazyl 2014-11-15
  • 打赏
  • 举报
回复
楼主是有些逻辑问题,像二楼说的,前面的if全作废,几乎是无用的
WeiMingyue 2014-11-14
  • 打赏
  • 举报
回复
我是个菜鸟,赞同二楼的讲法。
百曉生 2014-11-14
  • 打赏
  • 举报
回复
二楼是重点,要实现这个,可以用switch,也可以
#include<stdio.h>
int main(){
int year,month,day=0;
printf("input year,month:\n");
scanf("%d,%d",&year,&month);
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) {
day=31;
goto Print;
}
if(month==4||month==6||month==9||month==11) {
day=30;
goto Print;
}
if(month==2 && (year%4==0 && year%100!=0 || year%400==0)) {
day=29;
goto Print;
}
else
day=28;
Print:
printf("days=%d",day);
return 0;
}
魂之念想 2014-11-14
  • 打赏
  • 举报
回复
是与最近的没有结合的else结合
baobao418 2014-11-13
  • 打赏
  • 举报
回复
二楼说得对,就最后那个if else有用,days不是28就是29 ,前面不管咋样都被覆盖了
ForestDB 2014-11-13
  • 打赏
  • 举报
回复
LZ怎么输入的?
Luisfan 2014-11-13
  • 打赏
  • 举报
回复
跟你的件有关系,
starytx 2014-11-13
  • 打赏
  • 举报
回复
后边两个if前要加 else 否则那个最后的else 就和前边两个if没关系了,也就是除了月份是2并且是闰年以外的所有情况。而你的意图是除了上边那些情况之外的所有情况
707wk 2014-11-13
  • 打赏
  • 举报
回复
逻辑问题。。。
二进制脑袋 2014-11-13
  • 打赏
  • 举报
回复
引用 楼主 w82076322 的回复:
#include<stdio.h>
int main(){
	int year,month,day=0;
	printf("input year,month:\n");
	scanf("%d,%d",&year,&month);
	if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) 
		day=31;
	if(month==4||month==6||month==9||month==11)
		day=30;
	if(month==2 && (year%4==0 && year%100!=0 || year%400==0))
		day=29;
	else day=28;
	printf("days=%d",day);
	return 0;
}
在执行过程中,总会执行到day=28,输出结果于是总是28. 这段代码来自《C语言编程技巧分析》(清华大学出版社 高禹 主编 2014年1月第一版) 不要改成if-else if,我会那种方法,只想知道这段代码为何总执行else
看2楼的,仔细想想吧,编译器除了优化外,都会按照程序员写出来的程序语句翻译的。
景语 2014-11-13
  • 打赏
  • 举报
回复
逻辑问题,不是语法问题 3楼说得对
hubo86915531 2014-11-13
  • 打赏
  • 举报
回复

 if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) day=31;
 else if(month==4||month==6||month==9||month==11)day=30;
 else  if(month==2 && (year%4==0 && year%100!=0 || year%400==0))day=29;
 else day=28;
mymtom 2014-11-13
  • 打赏
  • 举报
回复
楼主的逻辑也不对哦, if(month==2 && (year%4==0 && year%100!=0 || year%400==0)) day=29; else day=28; ===> if(month==2 && (year%4==0 && year%100!=0 || year%400==0)) day=29; else if(month==2) day=28; 或者 ===> if(month==2) if (year%4==0 && year%100!=0 || year%400==0)) day=29; else day=28;
mymtom 2014-11-13
  • 打赏
  • 举报
回复
输入 2000,2 输出就是29啊 注意要输入逗号哦!
勤奋的小游侠 2014-11-13
  • 打赏
  • 举报
回复
确实是只和最近的if结合,所以你的day只能是29,或者28。 前面的几个if全部作废了。 即使前面是赋值31,后面的if和else会重新赋值
Lion_Peng 2014-11-13
  • 打赏
  • 举报
回复
当month == 1,3,4,5,6,7,8,9,10,11,12时
if(month==2 && (year%4==0 && year%100!=0 || year%400==0))
条件不满足就执行else语句
day=28;

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧