C#循环触发break后未打印输出,两段代码错误原因排查
C#代码问题排查与修正
核心错误点
两个版本的代码存在以下共性问题:
- 索引初始逻辑错误:两个版本均将循环变量i初始化为1,未给
array_num[0]赋值,该位置会保留int类型默认值0。首次判断会将你输入的第一个数和0做对比,若第一个输入小于0会误触发break,逻辑不符合预期。 - 执行顺序错误:代码先将当前输入的数存入数组、拼接到输出字符串,再判断是否小于前一个数。触发break条件时,不符合要求的数(你示例中的42)已经被加入输出字符串,最终打印内容会多出这个错误值。
- 输出格式错误:直接拼接数字字符串未添加逗号分隔,最终输出结果是连续数字拼接,和你预期的逗号分隔格式不符。
for循环版本额外存在索引越界风险:
- 循环条件写为
i <= array_num.Length,C#数组索引从0开始,长度为50的数组有效索引范围是0~49,当i=50时访问array_num[i]会抛出IndexOutOfRangeException导致程序崩溃。
修正后的代码示例(while版本)
class Program { static void Main(string[] args) { Console.WriteLine("please enter an integer number in two digits"); int[] array_num = new int[100]; string nu = ""; int i = 0; // 先处理第一个输入,无需判断 array_num[i] = int.Parse(Console.ReadLine()); nu += array_num[i].ToString(); i++; while(i < 100) { int current = int.Parse(Console.ReadLine()); // 先判断再决定是否存入 if (current < array_num[i - 1]) { break; } // 符合条件再拼接、存数组 nu += "," + current.ToString(); array_num[i] = current; i++; } Console.WriteLine("the numbers is " + nu); } }
内容的提问来源于stack exchange,提问作者leena almasnour
相关产品推荐
相关产品推荐

