int number;
string input;
do {
Console.WriteLine("number,plz");
number = Convert.ToInt32(Console.ReadLine()); // 第一次讀取
input = Console.ReadLine(); // 第二次讀取
Console.WriteLine("doule number is {0}!", (number * 2));
} while (input != "q");
循環體內調用了 兩次 Console.ReadLine():
Convert.ToInt32)。input 判斷是否退出。當用戶輸入 q 並按回車時:
ReadLine() 返回 "q",Convert.ToInt32("q") 直接拋出 FormatException(“輸入字符串的格式不正確”)。string input;
do {
Console.Write("請輸入整數 (輸入 q 退出): ");
input = Console.ReadLine();
if (input?.ToLower() == "q") break; // 先判斷退出條件
if (int.TryParse(input, out int number)) { // 安全轉換
Console.WriteLine($"雙倍結果: {number * 2}");
} else {
Console.WriteLine("輸入無效,請輸入整數!");
}
} while (true);
int.TryParse 替代 Convert.ToInt32:避免異常控制流,代碼更健壯、性能更好。input?.ToLower() 防止按 Ctrl+Z (EOF) 導致 input 為 null。public static T ReadInput<T>(string prompt, Func<string, T> parser, string exitToken = "q") {
while (true) {
Console.Write(prompt);
var line = Console.ReadLine();
if (line?.Trim().Equals(exitToken, StringComparison.OrdinalIgnoreCase) == true) {
return default; // 或拋出自定義異常表示用戶主動退出
}
try {
return parser(line);
} catch {
Console.WriteLine("格式錯誤,請重新輸入。");
}
}
}
// 使用示例
var num = ReadInput("輸入數字: ", int.Parse);
if (num != 0) Console.WriteLine($"結果: {num * 2}");
控制台交互的核心原則:讀取一次、先驗證業務邏輯(退出)、再做類型轉換、優先用 TryParse 系列方法。這能消除 90% 的初學者輸入異常問題。