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

C#控制台如何录入多字符姓名字符串解决ToChar转换报错

问题背景

需要实现的C#控制台程序规则:

  • 录入规则:按顺序输入两组数据,每组包含姓名、耗时两个字段,输入顺序为姓名1、时间1、姓名2、时间2
  • 输出规则:对比两个耗时,输出耗时更短(成绩最优)的对应姓名
    现有代码仅支持单字符姓名输入,输入长度大于1的全名时会抛出String must be exactly one character long运行时错误,原有代码如下:
string inputdata = Console.ReadLine(); 
char name = Convert.ToChar(inputdata); 
inputdata = Console.ReadLine();
double time1 = Convert.ToDouble(inputdata); 
inputdata = Console.ReadLine(); 
char name2 = Convert.ToChar(inputdata); 
inputdata = Console.ReadLine(); 
double time2 = Convert.ToDouble(inputdata); 
inputdata = Console.ReadLine(); 
if (time1 < time2) { Console.WriteLine(name); } 
else { Console.WriteLine(name2);
错误根因

char类型仅能存储单个字符,你将输入的姓名强制转换为char类型,只要输入内容长度不是1,Convert.ToChar()就会触发长度校验报错。姓名属于任意长度的文本,直接用string类型存储即可,无需转成char。另外原有代码末尾缺少闭合大括号,还多写了一次无意义的Console.ReadLine()调用,会导致程序要求额外多输入一次内容才会执行判断。

修复后代码
// 读取第一组参赛数据
string name1 = Console.ReadLine();
double time1 = Convert.ToDouble(Console.ReadLine());
// 读取第二组参赛数据
string name2 = Console.ReadLine();
double time2 = Convert.ToDouble(Console.ReadLine());
// 对比耗时输出最优成绩姓名
Console.WriteLine(time1 < time2 ? name1 : name2);
优化建议
  • 存储姓名直接使用string类型,Console.ReadLine()返回值本身就是字符串,不需要额外类型转换,支持任意长度的中英文姓名输入
  • 如果要提升程序健壮性,可以用double.TryParse()做耗时输入的合法性校验,避免用户输入非数字内容时程序崩溃
  • 简单的二选一判断可以用三元运算符简化代码,写法更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:03:20