7.2Record结构中的程序存在编译器错误

问题描述

我想编写以下程序,但出现错误。我该怎么办?该程序的内容

  1. 记录输入(无效):从标准输入(键盘)到 结构
  2. void output(Record):将结构内容输出到标准 输出显示显示屏上)
  3. int main():定义结构变量数据。呼叫输入和 分别输出一次。
  4. 对上述程序进行了进一步的修改(主要功能修改) 并添加函数int getage(Record))以对应数据 两个人。
  5. 将结构变量数据更改为带有 元素数量2,并使用prog02a.c函数输入和输出 在上一个问题中创建以从标准输入中输入数据 并输出到两个人的标准输出中(未更改 输入或输出功能)。
  6. 此外,使用结构元素作为参数,创建一个 int getage(Record)函数可在返回时返回完整年龄 参考日期,请从main调用函数,以便 每个人也会显示。但是,记录日期为十月 2020年1月1日,并将由宏给出。

prog02b.c源代码

#include <stdio.h>
#include "prog01.h"
#define YEAR 2019
#define MANTH 10
#define DAY 1

Record input (void);

void output (Record);

int getage (Record);

int main () {
  
  int i;
  
  Record data [2];

  printf ("-------- data entry -------- \ n");

  for (i = 0; i <2; i ++) {
    
    printf ("% dth",i + 1);
    
    data [i] = input ();
  }

  printf ("\ n -------- data output -------- \ nage base date:% d year% d month% d day \ n",YEAR,MANTH,DAY);
  
  for (i = 0; i <2; i ++) {
    printf ("% dth data: \ n",i + 1);
    
    output (data [i]);

    printf ("First name (last name):% s \ n First name (first name):% s \ n Date of birth:% d year% d month% d day \ n Age:% d \ n",data.familyname,data. firstname,data.birthday [0],data.birth>
  }
    
  return 0;
}

Record input (void) {
  Record data;
  
  printf ("Enter data \ n");
  
  printf ("first name (surname)->");
  scanf ("% s",data.familyname);

  printf ("name (first name)->");
  scanf ("% s",data.firstname);
  
  
  printf ("Year of birth (AD)->");
  scanf ("% d",& data.birthday [0]);
  
  printf ("month of birth->");
  scanf ("% d",& data.birthday [1]);
  
  printf ("date of birth->");
  scanf ("% d",& data.birthday [2]);

  printf ("Gender (0: Male,1: Female)->");
  scanf ("% d",& data.gender);

  return data;
}

void output (Record data) {
  printf ("First name (last name):% s \ n First name (first name):% s \ n Date of birth:% d year% d month% d day",data.firstname,data.birthday [1],data.>
  
  if (data.gender == 0)
    {printf ("(male) \ n");
  
    } else {printf ("(female) \ n");
  }
}

int getage (Record data) {
  if (data.birthday [1]> = MANTH) return YEAR-data.birthday [0] -1;
  else return YEAR-data.birthday [0];
}

prog01.h

typedef struct
    char familyname[20]; // first name (last name)
    char firstname[20];  // name (first name)
    int birthday[3];     //Birthday (Element 0: A.D. Element 1: Month Element 2: Day)
    int gender;        //Gender (0:Male,1:Female)
Record.

拼贴错误

prog02b.c: In function ‘main’:
prog02b.c: 35: 103: error: ‘(Record *) & data’ is a pointer; did you mean to use ‘->’?
   35 |):% s \ n Date of Birth:% d Years% d Months% d Days \ n Age:% d \ n ",data.birthday [ 1],data.birthday [2],getage (data [i]));
      | ^
      |->
prog02b.c: 35: 120: error: ‘(Record *) & data’ is a pointer; did you mean to use ‘->’?
   35 | � days:% d years% d months% d days \ n age:% d \ n ",data.birthday [ 2],getage (data [i]));
      | ^
      |->
prog02b.c: 35: 136: error: ‘(Record *) & data’ is a pointer; did you mean to use ‘->’?
   35 | �% d days \ n age:% d \ n ",getage (data [i] ]));
      | ^
      |->
prog02b.c: 35: 154: error: ‘(Record *) & data’ is a pointer; did you mean to use ‘->’?
   35 |% d \ n ",getage (data [i]));
      | ^
      |->
prog02b.c: 35: 172: error: ‘(Record *) & data’ is a pointer; did you mean to use ‘->’?
   35 | ame,getage (data [i]));
      | ^
      |->

“ | ^”每个错误点都是data.familyname,data.firstname,data.birthday [0],data.birthday [1],data.birthday [2]。

解决方法

有很多问题。我已对它们进行了更正,因此您的程序可以正确编译,而不会出现错误或警告。

但是我不知道它是否确实应该做。

#include <stdio.h>

typedef struct
{
  char familyname[20]; // first name (last name)
  char firstname[20];  // name (first name)
  int birthday[3];     //Birthday (Element 0: A.D. Element 1: Month Element 2: Day)
  int gender;        //Gender (0:Male,1:Female)
}
Record;

#define YEAR 2019
#define MANTH 10
#define DAY 1

Record input(void);
void output(Record);
int getage(Record);

int main()
{
  int i;
  Record data[2];

  printf("-------- data entry --------\n");

  for (i = 0; i < 2; i++) {
    printf("%dth",i + 1);
    data[i] = input();
  }

  printf("\n -------- data output -------- \nage base date:%d year%d month%d day\n",YEAR,MANTH,DAY);

  for (i = 0; i < 2; i++)
  {
    printf("%dth data:\n",i);
    output(data[i]);

    printf("First name (last name): %s\n First name (first name): %s\n Date of birth: %d year %d month %d day\n age: %d\n",data[i].familyname,data[i].firstname,data[i].birthday[0],data[i].birthday[1],data[i].birthday[2],getage(data[i]));
  }

  return 0;
}

Record input(void) {
  Record data;

  printf("Enter data \n");

  printf("first name (surname)->");
  scanf("%s",data.familyname);

  printf("name (first name)->");
  scanf("%s",data.firstname);


  printf("Year of birth (AD)->");
  scanf("%d",&data.birthday[0]);

  printf("month of birth->");
  scanf("%d",&data.birthday[1]);

  printf("date of birth->");
  scanf("%d",&data.birthday[2]);

  printf("Gender (0: Male,1: Female)->");
  scanf("%d",&data.gender);

  return data;
}

void output(Record data) {
  printf("First name (last name):%s \n First name (first name):%s \n Date of birth:%d year %d month %d day",data.familyname,data.firstname,data.birthday[0],data.birthday[1],data.birthday[2]);

    if (data.gender == 0)
    {
      printf("(male) \n");
    }
    else 
    {
      printf("(female) \n");
    }
}

int getage(Record data) {
  if (data.birthday[1] >= MANTH) return YEAR - data.birthday[0] - 1;
  else return YEAR - data.birthday[0];
}