请求协助解决C#计算输入数字约数的循环问题
问题分析与修复方案
原代码的核心问题
y仅在初始化时计算了一次,后续循环中未更新值,导致内部while(y==0)陷入无限循环(因为任何数对1取余结果都是0)- 循环逻辑错误:初始
x=1,进入while(x<input)后先执行x++,直接跳过了1这个约数;同时循环条件x<input会漏掉输入数字本身这个约数 - 输出格式不符合要求,每个约数单独换行,而非需求中的逗号分隔字符串
修正后的代码
namespace Divisions { class Program { static void Main(string[] args) { Console.WriteLine("Enter number:"); // 增加输入合法性判断,避免非数字输入导致程序崩溃 if (int.TryParse(Console.ReadLine(), out int input) && input > 0) { var divisors = new List<int>(); // 遍历1到输入数字的所有整数,逐一判断是否为约数 for (int x = 1; x <= input; x++) { if (input % x == 0) { divisors.Add(x); } } // 将约数列表格式化为逗号分隔的字符串输出 Console.WriteLine(string.Join(", ", divisors)); } else { Console.WriteLine("请输入有效的正整数"); } } } }
关键优化说明
- 用
int.TryParse替代Convert.ToInt32,处理用户输入非数字的情况,提升程序健壮性 - 使用
for循环遍历1到输入数字的所有整数,确保不会遗漏1和输入数字本身这两个必有的约数 - 用
List<int>收集所有约数,最后通过string.Join统一输出格式,完全匹配需求中的逗号分隔样式 - 增加正整数校验,避免处理0或负数的无效情况
内容的提问来源于stack exchange,提问作者Doston
相关产品推荐
相关产品推荐

