为什么给出的C代码运行异常?仅能读取员工姓名无法读取年龄与薪资
问题诊断
你的代码存在3个核心错误直接导致无法正常读取年龄和薪资:
- scanf格式字符串中多余的空白字符:
%s\n、%lf、%d \n里的\n和末尾空格属于无效写法,scanf中的空白字符会强制跳过所有连续空白,直到遇到非空白字符才结束匹配,导致输入逻辑阻塞错位。 - 读取数值型变量时缺少取地址符
&:scanf("%lf", (ptr + i)->salary)和scanf("%d", (ptr + i)->age)没有对变量取地址,直接将变量值作为内存地址传入,属于非法内存访问,自然无法正常读取数值。 - 补充优化点:
%s默认以空白符为分隔符,无法读取带空格的姓名,可替换为%[^\n]适配含空格的姓名输入。
修正后可运行代码
#include <stdio.h> #include <stdlib.h> struct worker { char sri[100]; int age; double salary; }; int main() { struct worker *ptr; int n; printf("输入员工数量:"); scanf("%d", &n); // 分配n个worker结构体的内存 ptr = (struct worker *)malloc(n * sizeof(struct worker)); if(ptr == NULL) { printf("内存分配失败"); return 1; } for (int i = 0; i < n; ++i) { printf("第%d位员工:\n", i+1); printf("输入姓名:"); scanf("%s", (ptr + i)->sri); printf("输入薪资:\n"); scanf("%lf", &(ptr + i)->salary); printf("输入年龄:\n"); scanf("%d", &(ptr + i)->age); } for (int i = 0; i < n; ++i) { printf("第%d位员工信息:", i+1); printf("姓名=%s ", (ptr + i)->sri); printf("年龄=%d, ", (ptr + i)->age); printf("薪资=%.2lf\n", (ptr + i)->salary); } free(ptr); return 0; }
内容的提问来源于stack exchange,提问作者raz Sudhanshu
相关产品推荐
相关产品推荐

