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

C#数组赋值异常:仅最后一次输入为首个元素,其余元素为0

问题分析

你遇到的核心问题:

  • InputArray 方法每次调用时会把整个数组的所有元素都赋值为当前输入内容,而 main 里循环调用该方法的次数等于数组长度,导致每次调用都会覆盖之前的数组内容。
  • 方法内的 k 变量始终为0且未递增,加上 goto 滥用,让输入和赋值逻辑完全混乱,最终出现数组仅保留最后一次输入、其余元素异常的情况。
代码错误点拆解
  1. main方法调用错误:循环传入整个数组调用 InputArray,导致每次调用都修改全数组,而非逐个填充元素。
  2. 数组赋值逻辑错误:end 标签下的 for 循环遍历全数组,把所有元素设为当前 input,完全覆盖之前输入。
  3. 无效字符判断:char.TryParse 的判断条件 (c1 < -1) && (c1 > 11) 不成立(char 取值范围是0-65535,无负数),该分支无实际作用。
  4. 冗余类型解析:double.TryParse 成功时,int.TryParse 判断多余,整数可直接解析为double。
  5. 索引变量未递增:k 初始为0且从未修改,导致每次调用方法都会重复触发输入逻辑。
修正后的代码

修正后的InputArray方法

private static void InputArray(double[] numbers)
{
    for (int i = 0; i < numbers.Length; i++)
    {
        double inputValue;
        Console.Write($"Enter number {i + 1}: ");
        
        while (true)
        {
            string input = Console.ReadLine();
            
            // 尝试解析为double
            if (double.TryParse(input, out inputValue))
            {
                // 验证范围
                if (inputValue >= 0 && inputValue <= 100)
                {
                    numbers[i] = inputValue;
                    break; // 验证通过,处理下一个元素
                }
                else
                {
                    Console.WriteLine("输入超出有效范围(0-100),请重新输入:");
                }
            }
            else
            {
                // 解析失败,提供结束输入选项
                Console.WriteLine("输入不是有效的数字,是否结束输入?(Y/N)");
                string confirm = Console.ReadLine().Trim().ToUpper();
                if (confirm == "Y")
                {
                    return;
                }
                else
                {
                    Console.Write("请重新输入有效数字:");
                }
            }
        }
    }
    Console.WriteLine("所有元素输入完成。");
}

修正后的main方法调用

// 假设number是已初始化的数组
InputArray(number);
修正说明
  1. 移除循环调用:让 InputArray 一次性处理全数组输入,避免重复覆盖。
  2. 逐个填充元素:通过 for 循环遍历数组索引,输入验证通过后直接赋值给当前索引元素。
  3. 替换goto为while循环:用清晰的循环结构处理输入重试,避免代码跳转混乱。
  4. 简化验证逻辑:去掉无效字符判断,统一用 double.TryParse 处理数字解析,范围验证更简洁。
  5. 增加结束输入选项:输入无效时提供结束选择,逻辑更友好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:27:22