[求助]简单奇妙的问题
输入月份数字,输出相应英文名字
#include"stdio.h"
#include"conio.h"
main()
{
int i,n ;
static char a[][11]=
{
"invalid","january","february","march","april","may","june",
"july","august","september","october","november","december"
}
;
printf("input the month\n");
scanf("%d",&n);
printf("it's %s\n",(0<n<13)?a[n]:a[0]);
return(0);
}
输入15就完蛋
printf("it's %s\n",(a<1||a>12)?a[0]:a[n]);
然后就OK
有什么区别???
----------------解决方案--------------------------------------------------------
因为C里面没有这种0<n<13的表达方法,
在C语言中,条件的并列只能用&&和||实现。
您还可以改成:
printf("it's %s\n",n>0&&n<13?a[n]:a[0]);
----------------解决方案--------------------------------------------------------
但注意0<n<13编译器之所以不报错,是因为它把这条件解释成(由左往右):
0<n真否,真则为1,否则为0,而不管真假,都是小于13,所以都只打印a[n],
----------------解决方案--------------------------------------------------------
要细心
----------------解决方案--------------------------------------------------------
按楼主说的
用printf("it's %s\n",(0<n<13)?a[n]:a[0]);
替换printf("it's %s\n",(0<n<13)?a[n]:a[0]); //0<n<13改为n>0&&n<13
编译根本就不能通过阿
----------------解决方案--------------------------------------------------------
谢谢斑竹
----------------解决方案--------------------------------------------------------