为什么我的while循环不起作用?有人可以告诉我错误消息的工作原理吗?

时间:2019-05-30 17:47:59

标签: c# if-statement while-loop application-restart

如何重新启动此代码块?我的想法是,如果您输入一个将返回错误消息的字符。循环的条件是什么?

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!");
}

1 个答案:

答案 0 :(得分:1)

您可以将现有代码转换为使用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,指示是否{{ 1}}有效)。因此,如果您希望将数字限制为int1,则可以执行以下操作:

5