C语⾔----结构体---结构体与函数
结构作为参数的函数
1. 整个结构可以作为参数传⼊函数
2. 这时是在函数中新建了⼀个结构变量,并复制调⽤这个结构的值(重点,只是把值传⼊函数,⽽函数外⾯真正的变量并没有改变,与
数组不同)
3. 函数也可以返回⼀个结构
直接来个简单的例⼦吧:
问题:⽤户输⼊今天的⽇期,输出明天的⽇期。
提⽰:闰年,每个⽉最后⼀天,
代码:
#include <stdio.h>
#include <stdbool.h>
/* 根据今天的⽇期算出明天的⽇期。*/
//结构体放在函数外侧,相当于⼀个全局变量,所有的函数都能使⽤。
struct date
{
  int month;
  int day;
  int year;
};    //记住这个分号
bool is_leap(struct date d);  //判断是否为闰年
int numbersofdays(struct date d);  //给出这个⽉的天数
int main(int argc, char const *argv[])
{
  struct date today;   //定义两个结构体变量
  struct date tomorrow;
  int days;
  int flag=1;  //实现输⼊控制
  printf("请输⼊今天的⽇期(9-24-2012):");
  scanf("%i-%i-%i",&h,&today.day,&ar);
  days = numbersofdays(today);
  tomorrow = today;  //可以像⼀般变量⼀样赋值
  if(today.day<days && h <=12){
    tomorrow.day = today.day + 1;
  }else if(today.day == days && h <12){
    tomorrow.day = 1;
    h +=1;
  }else if(today.day == days && h == 12){
    tomorrow.day =1;
    h =1;
    ar+=1;
  }else{
    flag = 0;
    printf("输⼊有误!");
  }
  if(flag){
    printf("明天的⽇期是:");
    printf("%i-%i-%i\n",h,tomorrow.ar);  }
  return 0;
}
bool is_leap(struct date d)
怎么用printf输出bool函数值{
  bool is = false;
  if((d.year%4==0 && d.year%100!=0) || d.year%400==0)
    is = true;
  return is;
}
int numbersofdays(struct date d)
{
  int days;
  int dayspermonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  h==2 && is_leap(d))
  {
    days = 29;
  }
  else
  {
    days = h-1];
  }
  return days;
}