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

C# while循环输入大于800数值退出后输出报FormatException异常求助

你遇到的System.FormatException异常是字符串格式化时占位符索引超过传入参数的数量导致的,具体问题和修复方案如下:

问题定位

你的输出代码里存在两个明显的格式化错误:

  1. 第一行输出语句:
Console.WriteLine("| {0,-10} | {1,5} | {6,10} | {11,15} |" , "Range" , "Count" , "Sum Lengths" , "Percentage");

你用了占位符{0}、{1}、{6}、{11},但后面仅传入了4个参数,参数最大索引为3,{6}和{11}显然超出了参数列表的范围。
2. 第二行输出语句问题更严重:

Console.WriteLine("| {0,-10} | {1,5} | {6,10} | {11,15} |" , "<200" + "200 - 399" + "400 - 599");

这里你把三个区间字符串拼接成了1个参数传入,参数列表总共只有1个元素,除了{0}之外其他占位符全部超出索引范围。

其他潜在问题

除了格式化异常外,你的代码还有其他风险:

  • 边界值未处理:userInput等于200、400、600、800时,不会命中任何if分支,会进入死循环
  • 输入安全问题:直接用int.Parse接收用户输入,如果输入非数字内容会直接抛出异常,建议替换为int.TryParse做合法性校验
  • largestValue、smallestValue两个变量在你给出的代码里没有赋值逻辑,运行时会抛出未赋值异常
  • 你的break分支只有userInput>800才会触发,等于800时不会退出循环

修复示例

格式化输出修复(按表格逻辑修改)

// 表头 四个参数对应四个占位符,索引从0到3
Console.WriteLine("| {0,-10} | {1,5} | {2,10} | {3,15} |" , "Range" , "Count" , "Sum Lengths" , "Percentage");
Console.WriteLine("|-----------|-------|------------|-----------------|");
// 分别输出四个区间的行,示例为小于200的行:
Console.WriteLine("| {0,-10} | {1,5} | {2,10} | {3,15:P2} |" , "<200" , cOne , sumLengthOne , (double)cOne/(cOne+cTwo+cThree+cFour));
// 200-399的行:
Console.WriteLine("| {0,-10} | {1,5} | {2,10} | {3,15:P2} |" , "200-399" , cTwo , sumLengthTwo , (double)cTwo/(cOne+cTwo+cThree+cFour));
// 剩下两个区间按同样逻辑输出即可

循环逻辑优化

调整循环结构避免重复代码和边界问题:

int userInput = 0;
while (true)
{
    // 先读取输入做合法性校验
    if(!int.TryParse(Console.ReadLine(), out userInput))
    {
        Console.WriteLine("请输入有效数字");
        continue;
    }
    // 大于等于800直接退出
    if(userInput >= 800) break;
    if(userInput >0 && userInput <200)
    {
        cOne++;
        sumLengthOne += userInput;
        // 这里不需要重复写读取输入的代码
    }
    // 剩下的分支补全等于边界的判断,比如else if(userInput >=200 && userInput <400)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:06:06