C语言,输入一个日期,计算该日是当年的第几天

#include<stdio.h>
int input(int *,int *,int *);
int cal_date(int,int,int);
struct Date
{ int year;
int month;
int day;
}date;
void main()
{
int v,c,*y=date.year,*m=date.month,*d=date.day;
clrscr();
v=input(y,m,d);
if(v==0)
return;
c=cal_date(*y,*m,*d);
printf("The %d day.",c);
}
int input(int *y,int *m,int *d)
{
printf("Please input a year:");
scanf("%d",y);
printf("Please input a month:");
scanf("%d",m);
if(*m<1||*m>12)
{
printf("Invalid month!");
return 0;
}
printf("Please input a day:");
scanf("%d",d);
switch(*m)
{
case 2:
if((*y)%400==0||((*y)%4==0&&(*y)%100!=0))
if(*d<1||*d>29)
{
printf("Invalid day!");
return 0;
}
else
if(*d<1||*d>28)
{
printf("Invalid day!");
return 0;
}
break;
case 4: case 6: case 9: case 11:
if(*d<1||*d>30)
{
printf("Invalid day!");
return 0;
}
break;
default:
if(*d<1||*d>31)
{
printf("Invalid day!");
return 0;
}
}
}
switch(m)
{
case 1: return count[0];
case 2: return count[1];
case 3: return count[2];
case 4: return count[3];
case 5: return count[4];
case 6: return count[5];
case 7: return count[6];
case 8: return count[7];
case 9: return count[8];
case 10: return count[9];
case 11: return count[10];
case 12: return count[11];
}
}

刚才发的代码不全,还要加上这些

报了警告:non-portable pointer conversion in function main

请问该如何解决

其实你这个题有两个错误,一个就是&,在C语言中,&是地址符,也就是说,最后输出的是d的地址,
在输入时需要&,就是需要地址才能找到存储的地方,在输出时则不需要,
你只要把&在输出的地方去掉就好
第二个就是你在判断师傅闰年时,这时候y的值你还没打进去,没有赋值,这样当然会错,下面是修改后的,你参考下,有不懂的请追问
#include <stdio.h>
main()
{int y,m,d,T;
printf("请输入年,月,日\n");
scanf("%d,%d,%d",&y,&m,&d);
if((y%4==0&&y%100!=0)||(y%400==0))
{ T=31+29;}
else
{T=31+28;}
switch(m)
{
case 1:printf("该日是本年的%d天。\n",d);break;
case 2:printf("该日是本年的%d天。\n",d+31);break;
case 3:printf("该日是本年的%d天。\n",d+T);break;
case 4:printf("该日是本年的%d天。\n",d+T+31);break;
case 5:printf("该日是本年的%d天。\n",d+T+31+30);break;
case 6:printf("该日是本年的%d天。\n",d+T+31*2+30);break;
case 7:printf("该日是本年的%d天。\n",d+T+31*2+30*2);break;
case 8:printf("该日是本年的%d天。\n",d+T+31*3+30*2);break;
case 9:printf("该日是本年的%d天。\n",d+T+31*4+30*2);break;
case 10:printf("该日是本年的%d天。\n",d+T+31*4+30*3);break;
case 11:printf("该日是本年的%d天。\n",d+T+31*5+30*3);break;
case 12:printf("该日是本年的%d天。\n",d+T+31*5+30*3);break;
}
}追问

刚才代码不全,现在补全了

以及我的那个y,m,d是指针,输入时应该不需要加&

温馨提示:答案为网友推荐,仅供参考
相似回答