Ste*_*rry -2 c struct function
我正在构建一个使用结构来记录学生记录的程序.任务是创建一个函数(findOldest
)来比较每个记录并找到最老的学生.
到目前为止这是我的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[20];
char surname[20];
char UUN[6];
char department[4];
char gender;
int age;
} student;
void printStudent(student s) {
printf("Name: %s %s\n", s.name, s.surname);
printf("UUN: %s\n", s.UUN);
printf("Department: %s\n", s.department);
printf("Gender: %c\n", s.gender);
printf("Age: %d\n", s.age);
}
student findOldest ( student *studentarr, int len ) {
int age = 0;
int i;
for ( i = 0; i < len; i++ ) {
if ( age <= studentarr[i].age ) {
age = studentarr[i].age;
}
}
}
int main(void) {
int i, length;
student studentarr[6] = {
{ "John", "Bishop", "s1234", "Inf", 'm', 18 },
{ "Lady", "Cook", "s2345", "Eng", 'f', 21 },
{ "James", "Jackson", "s3456", "Eng", 'm', 17 },
};
for ( i = 3; i < 6; i++ ) {
printf("Enter student %d details:\n", i+1);
printf("Forename: ");
scanf("%s", studentarr[i].name);
printf("Surname: ");
scanf("%s", studentarr[i].surname);
printf("UUN: ");
scanf("%s", studentarr[i].UUN);
printf("Department: ");
scanf("%s", studentarr[i].department);
printf("Gender: ");
scanf(" %c", &studentarr[i].gender);
printf("Age: ");
scanf("%d", &studentarr[i].age);
printf("\n\n");
}
for ( i = 0; i < 6; i++ ) {
printf("Student %d\n", i+1);
printStudent(studentarr[i]);
printf("\n\n");
}
length = sizeof(studentarr) / sizeof(studentarr[0]);
printf("Size of studentarr is %d.\n", length);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任务是让程序定义studentarr的前三个元素,就像完成一样,并让用户再次定义最后三个元素.然后调用函数findOldest.我的问题是创建findOldest,我做了一个尝试,但我很确定这是错的.
尝试按原样编译会发出警告;
studentDB2.c:30:1: warning: control reaches end of non-void function
[-Wreturn-type]
}
^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
编辑:好的,功能也改变了;
student findOldest ( student *studentarr, int len ) {
int age = 0, oldest_index = 0;
int i;
for ( i = 0; i < len; i++ ) {
if ( age <= studentarr[i].age ) {
age = studentarr[i].age;
oldest_index = i;
}
}
return studentarr[oldest_index];
}
Run Code Online (Sandbox Code Playgroud)
我如何在主要结尾处使用printf语句来说,年龄最大的学生是(例如学生4)并且年龄是19岁(再次为例)?
编辑:我试过这个
printf("The oldest student is %d years old.\n", findOldest(&studentarr[6], length).age);
Run Code Online (Sandbox Code Playgroud)
它正在调用函数,并且应该返回studentarr [1],因为这是具有最高年龄(21岁)的索引.相反,编译器正在返回;
The oldest student is 1297237332 years old.
Run Code Online (Sandbox Code Playgroud)
问题是什么?
在您的findOldest
函数中,您正确更新到目前为止遇到的最大年龄.但是,您还必须跟踪studentarr
到目前为止找到最年长学生的索引.那你必须是return
这个学生.试试这个:
student findOldest ( student *studentarr, int len )
{
int age = 0;
int i, oldest_index = 0;
for ( i = 0; i < len; i++ ) {
if ( age <= studentarr[i].age ) {
age = studentarr[i].age;
oldest_index = i;
}
}
return studentarr[oldest_index];
}
Run Code Online (Sandbox Code Playgroud)