新人求解为什么输不出Error?

#include
int main()
{
int x,a;
scanf("%d",&x);
if(x>12)
printf("Error");
else if(x==4||x==6||x==9||x==11)
a=30;
else if(x==2)
a=28;
else
a=31;
printf("%d",a);
return 0;
}

因为你的最后一个else下面语句没有作为一个整体,以至于每次不管输入什么都会输出a。把代码修改了一下:
#include
int main()
{
int x,a;
scanf("%d",&x);
if(x>12)
printf("Error");
else if(x==4||x==6||x==9||x==11)
a=30;
else if(x==2)
a=28;
else
{
a=31;
printf("%d",a);}
return 0;
}
图片说明

看你怎么输入的,你要输入>12的数字,才是error
另外作为月份判断,你没有判断闰年。

if-else的问题,你原来的代码无论x取值多少,都会输出a;
可以改成下面的:

 #include <stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    if(x<=12)
{
switch(x){
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 12:
        printf("31\n");break;
    case 4:
    case 6:
    case 9:
    case 11:
        printf("30\n");break;
    case 2:
        printf("28\n");break;
        }   
}
    if(x>12)
    printf("Error\n");
    return 0;
}

当然,如果是解决月份和天数的问题,有需要考虑是否是闰年的话,还可以稍微改下代码:

 #include <stdio.h>
int main()
{
    int y,x;
    scanf("%d %d",&y,&x);//输入年份和月份 
    if(x<=12)
    {
     switch(x){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:printf("31\n");break;
        case 4:
        case 6:
        case 9:
        case 11:printf("30\n");break;
        case 2:if(y%400==0 || (y%4==0 && y%100!=0))
        printf("29\n");
        else printf("28");break;
    }   
    }
   if(x>12)
    printf("Error\n");
    return 0;
}

答:代码本身存在一些问题,所以无法输出。
改进代码如下:

#include<stdio.h>       //修改1:此处不能漏掉<stdio.h>
int main()
{
    int x, a=0;         //修改2:由于无论x取什么值都会打印a,故应该给a赋初值
    scanf("%d", &x);
    if (x > 12)
        printf("Error\n");
    else if (x == 4 || x == 6 || x == 9 || x == 11)
        a = 30;
    else if (x == 2)
        a = 28;
    else
        a = 31;
    printf("a=%d\n", a);
    return 0;
}

你的代码,在我这运行,当x值大于12时是可以输出error的。运行结果图如下:

图片说明

但是可以看出出现了运行错误,那是因为最后一个else系统把它当做if(x==2)的else,导致当x>12时,a没有值。
解决方法以上各位都已经给出来了,不做赘述了。