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
相关产品推荐
相关产品推荐

