C警告:控制到达非void函数结构+结构问题

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)

问题是什么?

VHa*_*sop 5

在您的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)