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

如何根据用户输入整数访问结构体数组元素?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;
}

关键说明

  1. 结构体成员访问:要访问结构体中的数组,必须通过结构体变量(如pc.pc_no[index])
  2. scanf地址传递:scanf需要变量的内存地址来存储输入值,所以用&choice
  3. 数组索引合法性:数组索引从0开始,输入的PC编号如果是1-20,需要减1才能对应正确的数组位置
  4. 指向数组的指针:int (*pc_ptr)[20] = &pc.pc_no; 定义了一个指向包含20个int元素的数组的指针,通过(*pc_ptr)[index]可以访问数组元素,这和你提到的Pointer to an array of characters(指向字符数组的指针)是同一类指针概念,只是元素类型不同

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:55:19