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

C语言基础学习:修改结构体程序实现用户输入功能

修改后的C语言程序(支持用户输入人员信息)

以下是调整后的代码,替换了原有的预设初始化逻辑,改为通过scanf接收用户输入,再调用原有的Mostrar函数输出信息:

#include <stdio.h>

typedef struct {
    int day, month, year;
} DATA;
typedef struct person {
    char name[100];
    int age;
    float salary;
    DATA birth;
} PERSON;

void Mostrar(struct person x){
    printf("name: %s\n",x.name);
    printf("age: %d\n",x.age);
    printf("Salário: %f\n",x.salary);
    printf("Dt.birth: %d/%d/%d\n",x.birth.day, x.birth.month, x.birth.year);
}

int main(){
    PERSON p; // 定义空的PERSON结构体变量,不再直接初始化

    // 提示用户输入信息并读取
    printf("请输入姓名:");
    scanf("%s", p.name); // 数组名本身是地址,无需加&

    printf("请输入年龄:");
    scanf("%d", &p.age);

    printf("请输入薪资:");
    scanf("%f", &p.salary);

    printf("请输入出生日期(格式:日/月/年,如23/5/1954):");
    scanf("%d/%d/%d", &p.birth.day, &p.birth.month, &p.birth.year);

    // 调用输出函数
    Mostrar(p);
    return 0;
}

关键修改说明

  • 移除了main函数中struct person p的直接初始化代码,改为定义空的结构体变量
  • 添加了用户输入提示,针对不同数据类型使用对应的scanf格式符:
    • 字符串类型(姓名):使用%s,由于name是字符数组,直接传入数组名即可(数组名等价于首元素地址)
    • 整数类型(年龄、生日的日/月/年):使用%d,需要传入变量的地址(加&)
    • 浮点类型(薪资):使用%f,同样需要传入变量地址
  • 出生日期的输入做了格式适配,用户可以按日/月/年的格式输入,scanf会自动解析斜杠分隔的三个整数

补充说明

如果需要支持带空格的姓名(比如"Carlos Silva"),可以把姓名的输入改为fgets:

printf("请输入姓名:");
getchar(); // 清除之前输入留下的换行符
fgets(p.name, sizeof(p.name), stdin);
// 去掉fgets读取的换行符
p.name[strcspn(p.name, "\n")] = '\0';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:31:22