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

WinForm C#数组操作:无数据终止遍历、修正长度显示与位置计数

问题修复方案

你当前代码的问题来自三个逻辑疏漏:

  • 初始化了固定长度10的数组后,直接取数组的声明长度作为已存学生数,所以弹窗永远显示10
  • 遍历循环的终止条件设为数组总长度,会把没存数据的空位数组元素也遍历出来
  • 直接使用数组从0开始的索引作为展示序号,没有做+1偏移
  • 额外存在变量名拼写错误:遍历处写的lista和你定义的数组名list不一致,会触发编译错误

具体修改逻辑

  • 用你已经定义的pos变量作为实际已录入学生的计数:每存一个学生pos就加1,这个值就是真实的学生总数,弹窗直接展示这个值即可
  • 循环遍历的终止条件改为i < pos,只会遍历已经存入有效姓名的数组位置,不会访问空元素
  • 展示位置序号时使用i + 1替代原有的i,即可实现从1开始计数的需求
  • 补充基础边界判断:防止数组存满后继续录入触发索引越界,同时过滤空姓名输入、无数据时点击查询的异常场景

修正后完整代码

string[] list = new string[10];
int pos = 0;

public Form1()
{
    InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
    // 数组存满时拦截录入,防止索引越界
    if (pos >= list.Length)
    {
        MessageBox.Show("最多支持录入10名学生信息");
        textBox1.Clear();
        return;
    }

    string studentName = textBox1.Text.Trim();
    if (string.IsNullOrWhiteSpace(studentName))
    {
        MessageBox.Show("请输入有效的学生姓名");
        return;
    }

    list[pos] = studentName;
    pos++;
    textBox1.Clear();
}

private void button2_Click(object sender, EventArgs e)
{
    // 展示真实录入的学生数量
    MessageBox.Show($"已录入学生总数:{pos}");
    
    if (pos == 0)
    {
        MessageBox.Show("暂无已录入的学生信息");
        return;
    }

    // 仅遍历已存入有效数据的数组位
    for (int i = 0; i < pos; i++)
    {
        string message = $"The student   {list[i]} has the position {i + 1}";
        MessageBox.Show(message);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:06:27