C#中如何逐行读取用户输入(类似Java Scanner或Go bufio的实现方式)
C#中如何逐行读取用户输入(类似Java Scanner或Go bufio的实现方式)
嘿,我来帮你搞定这个问题!你现在的思路其实已经找对方向啦——C#里的Console.ReadLine()就可以实现类似Java Scanner、Go bufio的逐行读取功能,刚好匹配你的需求。
先明确下你的输入输出要求:
输入示例:
3 Hans Grethe Otto输出示例:
takk Hans takk Grethe takk Otto
你的基础代码逻辑是对的,但可以做一些优化让它更健壮,同时严格匹配输出要求:
优化后的代码
using System; namespace kattis { class Program { static void Main(String[] args) { // 先读取宾客数量,做合法性校验避免出错 if (!int.TryParse(Console.ReadLine(), out int guestCount)) { Console.WriteLine("请输入有效的数字哦!"); return; } // 循环读取每个宾客名字并输出感谢语 for (int i = 0; i < guestCount; i++) { string guestName = Console.ReadLine(); // 处理用户可能直接按回车的情况 if (string.IsNullOrEmpty(guestName)) { Console.WriteLine("请输入有效的宾客名字呀!"); continue; } // 用字符串插值更简洁,同时匹配示例的小写takk Console.WriteLine($"takk {guestName}"); } } } }
几点小说明:
- 健壮性优化:用
int.TryParse替代Convert.ToInt32,如果用户输入的不是数字,程序不会崩溃,还能友好提示; - 空值处理:增加
string.IsNullOrEmpty判断,防止用户直接回车或者结束输入导致的空引用问题; - 写法简洁性:用字符串插值
$"takk {guestName}"替代字符串拼接,代码更易读; - 输出匹配:把你代码里的
"Takk "改成小写的takk,和示例输出保持一致。
拓展:如果不知道输入行数怎么办?
要是你遇到不知道提前输入行数的场景,还可以用无限循环读取直到输入结束,这就更贴近Java Scanner的hasNextLine()或者Go bufio的逐行读取逻辑了:
using System; namespace kattis { class Program { static void Main(String[] args) { string line; // 一直读取直到用户按下Ctrl+Z(Windows)或Ctrl+D(Linux/Mac)结束输入 while ((line = Console.ReadLine()) != null) { Console.WriteLine($"takk {line}"); } } } }
备注:内容来源于stack exchange,提问作者Theresia Ravn
相关产品推荐
相关产品推荐

