You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过循环对比出生年月日判断三人中最年轻者?C语言person结构体实现

代码修正方案

原有代码核心问题

  • C语言不支持a > b > c连续比较语法,该写法实际会先计算a>b得到0/1的布尔值,再和c比较,逻辑完全错误
  • 大于等于运算符应为>=,不是=>
  • 结构体定义中无lastname字段,且用%d格式符输出字符串类型的name属于类型不匹配,会触发运行错误
  • 函数未定义返回值类型,无return语句,无法接收执行结果
  • 未使用循环逻辑,硬编码分支冗余度极高,易出错且扩展性差

修正后完整可运行代码

#include <stdio.h>
#include <string.h>

// 补全person结构体定义,你原有代码中遗漏的lastname可按需调整
typedef struct 
{
    char name[50];
    char lastname[50]; // 匹配原有打印逻辑补充的字段
    char day;
    char month;
    int year;
} person;

// 函数返回最年轻人员在数组中的下标,cnt参数为人员数量,支持扩展到3人以上场景
int the_youngest(person s[], int cnt) {
    if (cnt <= 0) return -1;
    int youngest_idx = 0;
    // 循环遍历对比所有人员
    for (int i = 1; i < cnt; i++) {
        person *cur = &s[i];
        person *y = &s[youngest_idx];
        // 优先对比出生年:出生年越大年龄越小
        if (cur->year > y->year) {
            youngest_idx = i;
            continue;
        }
        // 年相同对比出生月
        if (cur->year == y->year) {
            if (cur->month > y->month) {
                youngest_idx = i;
                continue;
            }
            // 月相同对比出生日
            if (cur->month == y->month) {
                if (cur->day > y->day) {
                    youngest_idx = i;
                    continue;
                }
            }
        }
    }
    return youngest_idx;
}

int main() {
    // 测试用3个人员数据,可按需修改
    person s[3] = {
        {"张三", "三", 10, 5, 2000},
        {"李四", "四", 20, 3, 2001},
        {"王五", "五", 5, 12, 2001}
    };
    // 调用函数,传入人员数组和数量3
    int o = the_youngest(s, 3);
    if (o < 0) {
        printf("人员数据为空\n");
        return 0;
    }
    // 同龄判断逻辑,匹配原有无法确定唯一最年轻者的需求
    int same_cnt = 0;
    for (int i = 0; i < 3; i++) {
        if (s[i].year == s[o].year && s[i].month == s[o].month && s[i].day == s[o].day) {
            same_cnt++;
        }
    }
    if (same_cnt > 1) {
        printf("It isn't possible to decide, who's the youngest\n");
    } else {
        printf("%s %s is the youngest\n", s[o].name, s[o].lastname);
    }
    return 0;
}

逻辑说明

  • 循环逻辑默认第一个人为初始最年轻者,依次和后续所有人员对比,实时更新最年轻者下标,完全符合你的实现要求
  • 无需硬编码大量判断分支,可直接扩展到3人以上的人员查找场景,仅需要修改传入的cnt参数即可
  • 补充了同龄重叠判断逻辑,匹配你原有代码中无法确定唯一最年轻者的输出要求

内容的提问来源于stack exchange,提问作者Mira0002

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:36:00