问题描述
- 记录输入(无效):从标准输入(键盘)到 结构
- void output(Record):将结构内容输出到标准 输出(显示在显示屏上)
- int main():定义结构变量数据。呼叫输入和 分别输出一次。
- 对上述程序进行了进一步的修改(主要功能的修改) 并添加函数int getage(Record))以对应数据 两个人。
- 将结构变量数据更改为带有 元素数量2,并使用prog02a.c函数输入和输出 在上一个问题中创建以从标准输入中输入数据 并输出到两个人的标准输出中(未更改 输入或输出功能)。
- 此外,使用结构元素作为参数,创建一个 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];
}