这个源代码为什么不能实现这个功能?

badtou 2002-11-21 03:36:16
# include <stdio.h>
struct date
{
int year;
int month;
int day;
};
int year(struct date a)
{
printf("请输入年份:");
scanf("%d",&a.year);
if (a.year<1000&&a.year>10000)
printf("日期输入无效,请重新输入\n");
scanf("%d",a.year);
return a.year;
}

int month(struct date a)
{
printf("请输入月份:");
scanf("%d",&a.month);
if (a.month<0&&a.month>12)
printf("月份输入无效,请重新输入:");
scanf("%d",&a.month);

return a.month;
}
int day(struct date a)
{
printf("请输入日期:");
scanf("%d",&a.day);
switch (a.month)
{

case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if (a.day>0&&a.day<=31)
a.day=a.day+1;
else
printf("日期输入无效,请重新输入");
scanf("%d",&a.day);
if (a.day=31)
a.month=a.month+1;
a.day=1;
return a.month;
return a.day;
break;

case 4:
case 6:
case 9:
case 11:
if (a.day>0 && a.day<=30)
a.day=a.day+1;
else
printf("日期输入无效,请重新输入");
scanf("%d",a.day);
if (a.day=30)
a.month=a.month+1;
a.day=1;
return a.month;
return a.day;
break;
case 2:
if (a.day=28)
a.day=a.day+1;
else
printf("日期输入无效,请重新输入");
scanf("%d",a.day);

return a.day;
break;
}
}

void main()
{
struct date a;
int year();

int month();

int day();

printf("%d年-%d月-%d日", a.year,a.month,a.day);
}

//这个程序是为实现输入年月日后,显示出的年月日是日期+1,请问我的程序定义的函数对不对,为什么不能在主函数中调用?



...全文
30 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
badtou 2002-11-21
  • 打赏
  • 举报
回复
谢谢各位
DaneWoo 2002-11-21
  • 打赏
  • 举报
回复
我的改动较大,具体代码如下(在VC6下已测试过)


# include <stdio.h>
#include <iostream.h>


struct date
{
int year;
int month;
int day;
};


struct date year()
{

struct date a;
//##############################################################################

printf("请输入年份(1000---10000):");

scanf("%d",&a.year);
while ( a.year<1000 || a.year>10000)
{
printf("日期输入无效,请重新输入(1000---10000):");
scanf("%d",&a.year);
}

//##############################################################################

printf("请输入月份(1---12):");
scanf("%d",&a.month);

while (a.month<1 || a.month>12)
{
printf("月份输入无效,请重新输入(1---12):");
scanf("%d",&a.month);
}

//##############################################################################

printf("请输入日期(1---31):");
scanf("%d",&a.day);

switch (a.month)
{ //switch begin

case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:

while (a.day<1 || a.day>32)
{
printf("日期输入无效,请重新输入");
scanf("%d",&a.day);
}

a.day+=1;
if(a.day==32)
{
a.month=a.month+1;
a.day=1;
if(a.month==13)
{
a.year +=1;
a.month =1;
}
}

break;

case 4:
case 6:
case 9:
case 11:

while (a.day<1 || a.day>31)
{
printf("日期输入无效,请重新输入");
scanf("%d",&a.day);
}

a.day+=1;
if(a.day==31)
{
a.month=a.month+1;
a.day=1;
if(a.month==13)
{
a.year +=1;
a.month =1;
}


}
break;


case 2:
while (a.day<1 || a.day>30)
{
printf("日期输入无效,请重新输入");
scanf("%d",&a.day);
}

a.day+=1;

//此处假使每年的2月份都只有29天

if(a.day==30)
{
a.month=a.month+1;
a.day=1;
if(a.month==13)
{
a.year +=1;
a.month =1;
}


}
break;


} //switch end
//cout<<a.year<<endl ;
//return a.year;

return a;
}


//********************************************************************

void main()
{
struct date a;
int y=0,m=0,d=0;

a=year();


cout<<"Year: "<<a.year<<endl;
cout<<"Month: "<<a.month <<endl;
cout<<"Day: "<<a.day <<endl;
}




NetBird_China 2002-11-21
  • 打赏
  • 举报
回复
分清结构与函数
badtou 2002-11-21
  • 打赏
  • 举报
回复
谢谢zxm954712(zhangxiaoming)
zxm954712 2002-11-21
  • 打赏
  • 举报
回复
一下为我改的:
# include <stdio.h>
struct date
{
int year;
int month;
int day;
};
int year(struct date a)
{
printf("请输入年份:");
scanf("%d",&a.year);
fflush(stdin);
if (a.year<1000&&a.year>10000) {
printf("日期输入无效,请重新输入\n");
scanf("%d",&a.year);
fflush(stdin);
}
return a.year;
}

int month(struct date a)
{
printf("请输入月份:");
scanf("%d",&a.month);
fflush(stdin);
if (a.month<0&&a.month>12) {
printf("月份输入无效,请重新输入:");
scanf("%d",&a.month);
fflush(stdin);
}
return a.month;
}

int day(struct date a, int *pMon, int *pYear)
{
printf("请输入日期:");
scanf("%d",&a.day);
fflush(stdin);
switch (*pMon)
{

case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if (a.day>0&&a.day<=31)
a.day=a.day+1;
else {
printf("日期输入无效,请重新输入");
scanf("%d",&a.day);
fflush(stdin); }
if (a.day==32) {
*pMon = (*pMon)+1;
if (*pMon > 12) {
(*pYear)++;
(*pMon)=1;
}
a.day=1;
}
break;

case 4:
case 6:
case 9:
case 11:
if (a.day>0 && a.day<=30)
a.day=a.day+1;
else {
printf("日期输入无效,请重新输入");
scanf("%d",a.day);
fflush(stdin);
}
if (a.day==31){
(*pMon)++;
a.day=1;
}
break;
case 2:
if (a.day > 0 && a.day <=28)
a.day=a.day+1;
else {
printf("日期输入无效,请重新输入");
scanf("%d",a.day);
fflush(stdin);
}
if (a.day == 29) {
(*pMon)++;
a.day = 1;
}
break;
}
return a.day;
}

void main()
{
struct date a;
int nYear, nMonth, nDay;
nYear =year(a);

nMonth =month(a);

nDay = day(a, &nMonth, &nYear);
a.year = nYear;
a.month = nMonth;
a.day = nDay;
printf("%d年-%d月-%d日", a.year,a.month,a.day);
}
试试吧,程序风格要写的好点啊:)
badtou 2002-11-21
  • 打赏
  • 举报
回复
请给出改动的源码,谢谢
new1mm 2002-11-21
  • 打赏
  • 举报
回复
对,参数应改用指针或引用
badtou 2002-11-21
  • 打赏
  • 举报
回复
请给出答案
keyinwind 2002-11-21
  • 打赏
  • 举报
回复
if (a.year<1000&&a.year>10000)
if (a.month<0&&a.month>12)
改为 ||
fountain521 2002-11-21
  • 打赏
  • 举报
回复
原来语句的语法上没有错误, 但是不会取到值的...
badtou 2002-11-21
  • 打赏
  • 举报
回复
函数调用正确吗
fountain521 2002-11-21
  • 打赏
  • 举报
回复
把最后一句:
printf("%d年-%d月-%d日", a.year,a.month,a.day);
改为
printf("%d年-%d月-%d日", year(a),month(a),day(a));

70,032

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧