大一新生初学c语言,要编写一个输入年月日输出这是今年多少天的程序,想问问为什么输出全错?
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int ys,ms,m1,m2,m4,ds,day;
scanf ("%d %d %d",&ys,&ms,&ds);
if
(((ys%4==0)&&(ys%100!=0))||ys%400==0)
{
m2=29;
}
else
{
m2=28;
}
m1=31;
m4=30;
switch (ms)
{
case '1':
day=ds;
break;
case '2':
day=m1+ds;
break;
case '3':
day=m1+m2+ds;
break;
case '4':
day=m1*2+m2+ds;
break;
case '5':
day=m1*2+m2+m4+ds;
break;
case '6':
day=m1*3+m2+m4+ds;
break;
case '7':
day=m1*3+m2+m4*2+ds;
break;
case '8':
day=m1*4+m2+m4*2+ds;
break;
case '9':
day=m1*5+m2+m4*2+ds;
break;
case '10':
day=m1*5+m2+m4*3+ds;
break;
case '11':
day=m1*7+m2+m4*2+ds;
break;
case '12':
day=m1*7+m2+m4*3+ds;
break;
}
printf("%d",day);
return 0;
}
你好,楼上的说得很对.你主要的错误就在 case 后面的数字加了 单引号,你一位数字加单引号可以理解,两位数加单引号是什么意思???两个数加单引号会出现警告: [Warning] multi-character character constant [-Wmultichar] 所以不对! 单引号只能加单个字符.
根据你的意思,ms是个整形范围为1-12,你输入的是1-12的整数,case判断也应该是1-12,当1-9加上单引号就不再是1-9了,而是字符1-9,电脑中值就是1-9的ASCII码了.
还有就是一般case要写上default语句,如:
default:
printf("月份输入出错!
");
break;
这样明显可以判断程序的错误.假如按你的程序加上上面这句,输入2018 1 1 就会出现:月份输入出错!
这样很容易判断.
上一篇:用C#编程基础循环完成