C语言中的default为什么不能弹出

来源:百度知道 编辑:UC知道 时间:2024/06/14 02:33:25
#include"stdio.h"
main()
{
int year,month,days;
printf("Input year and month:");
scanf("%d%d",&year,&month);
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 4:
case 6:
case 9:
case 11:
days=30;
break;
case 2:
if(year%4==0&&year%100!=0||year%400==0)
days=29;
else
days=28;
break;
default:
printf("Data error!");
break;
}
printf("Days=%d",days);
}

上面的程序,为什么我输入2008 14这样的错误数据时是显视Data eror!Days=890而不是只输出Data error!

因为你最后有个printf("Days=%d", days);
而如果你输入的month是14,是默认没有这种情况的,也就是跑的是default,这时候,days是不会被赋值的(而你的days也没有初值,所以变量未初始化),printf出来就可能是890这种随机数字。在我的电脑上试验的days是32141
把default分支改成:
default:
printf("Data Error!\n");
return -1;
break;

break;语句只是跳出循环,执行循环后的语句。

在你的代码中,break;执行后,它将跳出switch语句的作用域,而printf("Days=%d",days); 并不在switch语句的作用域内。所以不管输入是什么,它都将得到执行。

可以把default:后的break;改成return 1;这样一旦数据出错,自动退出程序。你也可以采用其他更好的方式来改进这个程序。

因为你在最后一定要打印printf("Days=%d",days); 所以给你一个随便的值.你在设一个条件就好了