如何根据用户输入整数访问结构体数组元素?C语言代码纠错求助
代码错误修复与解决方案
原代码的核心错误
scanf传参错误:必须传入变量的地址,原代码直接传choice会导致内存访问错误- 错误使用
strcpy:该函数用于字符串拷贝,和你要访问int数组元素的需求完全无关,且未通过结构体实例访问成员pc_no - 未通过结构体实例访问数组:
pc_no是struct user的成员,必须通过结构体变量pc来访问 - 数组未初始化:直接访问未赋值的数组元素会得到随机值
- 主函数写法不标准:C标准要求
main函数返回int类型
修正后的代码
#include <stdio.h> struct user { int pc_no[20]; }; int main() { // 初始化结构体中的pc_no数组,模拟多台PC的编号 struct user pc; for (int i = 0; i < 20; i++) { pc.pc_no[i] = i + 1; // 给每台PC设置编号为1-20 } printf("请输入要访问的PC编号(1-20):\n"); int choice; // 传入choice的地址,确保scanf能正确读取输入 scanf("%d", &choice); // 检查输入是否在有效范围内 if (choice >= 1 && choice <= 20) { // 数组索引从0开始,所以要减1 printf("你访问的PC编号为:%d\n", pc.pc_no[choice - 1]); // 演示指向数组的指针(对应你提到的Pointer to an array of characters的概念,这里是int数组指针) int (*pc_ptr)[20] = &pc.pc_no; printf("通过数组指针访问的PC编号:%d\n", (*pc_ptr)[choice - 1]); } else { printf("输入的编号无效,请输入1-20之间的整数!\n"); } return 0; }
关键说明
- 结构体成员访问:要访问结构体中的数组,必须通过结构体变量(如
pc.pc_no[index]) - scanf地址传递:
scanf需要变量的内存地址来存储输入值,所以用&choice - 数组索引合法性:数组索引从0开始,输入的PC编号如果是1-20,需要减1才能对应正确的数组位置
- 指向数组的指针:
int (*pc_ptr)[20] = &pc.pc_no;定义了一个指向包含20个int元素的数组的指针,通过(*pc_ptr)[index]可以访问数组元素,这和你提到的Pointer to an array of characters(指向字符数组的指针)是同一类指针概念,只是元素类型不同
内容的提问来源于stack exchange,提问作者MadGaber
相关产品推荐
相关产品推荐

