c# - 在输出中出现错误消息后重新启动 while 循环
问题描述
问题:如何重新启动以下代码块?我的想法是,如果您输入一个将返回错误消息的字符。循环的条件是什么?
string r_operation;
Console.Write("\tBitte geben Sie ihre Rechenoperation ein: ");
r_operation = Console.ReadLine();
-------------
while (?r_operation = Console.ReadLine())
{
Console.WriteLine("\tUngültige Eingabe. Bitte geben Sie nur Zahlen ein!");
}
解决方案
您可以转换现有代码以使用该int.TryParse
方法,该方法返回bool
指示输入字符串是否为有效数字(并将out
参数设置为转换后的值):
Console.Write("\tBitte geben Sie ihre Rechenoperation ein: ");
string r_operation = Console.ReadLine();
int result = 0;
while (!int.TryParse(r_operation, out result))
{
Console.WriteLine("\tUngültige Eingabe. Bitte geben Sie nur Zahlen ein!");
Console.Write("\tBitte geben Sie ihre Rechenoperation ein: ");
r_operation = Console.ReadLine();
}
// When we exit the while loop, we know that 'r_operation' is a number,
// and it's value is stored as an integer in 'result'
另一种方法是将从用户那里获取强类型数字的过程封装到一个方法中。这是我使用的一个:
private static int GetIntFromUser(string prompt, Func<int, bool> validator = null)
{
int result;
var cursorTop = Console.CursorTop;
do
{
ClearSpecificLineAndWrite(cursorTop, prompt);
} while (!int.TryParse(Console.ReadLine(), out result) ||
!(validator?.Invoke(result) ?? true));
return result;
}
private static void ClearSpecificLineAndWrite(int cursorTop, string message)
{
Console.SetCursorPosition(0, cursorTop);
Console.Write(new string(' ', Console.WindowWidth));
Console.SetCursorPosition(0, cursorTop);
Console.Write(message);
}
使用这些辅助方法,您的代码可以简化为:
int operation = GetIntFromUser("\tBitte geben Sie ihre Rechenoperation ein: ");
如果你想添加一些额外的约束,helper 方法还接受一个validator
函数(它接受一个int
并返回一个bool
指示 是否int
有效的)。因此,如果您想将数字限制为 from 1
to 5
,您可以执行以下操作:
var result = GetIntFromUser("Enter a number from 1 to 5: ", i => i > 0 && i < 6);
推荐阅读
- javascript - TypeError:null 不是对象(评估 ''this.state.torchon')
- python - 如何使用 matplotlib 添加动画图例
- android - 如何以编程方式在 RelativeLayout 内的两个布局之间添加 CustomLayout?
- javascript - 为什么 React.memo 不能与 useEffect 一起使用?
- google-cloud-dataproc - Dataproc 是否有每个作业的资源分配限制
- java - 如何将文件(屏幕截图)命名为时间戳?或纪元到字符串
- google-apps-script - gmail 插件 contextualTriggers 触发的事件中缺少 Gmail 属性
- google-sheets - 获取 Google Sheet csv 文件会产生 CORS 错误
- javascript - 如何镜像和反转画布对象的运动?
- wordpress - 如何在functions.php中添加谷歌字体