如何修复此循环

本文关键字:循环 何修复 | 更新日期: 2023-09-27 18:36:55

我对一个简单的代码有问题。我想做的是:例如,如果用户只给出一个负数而不是正数,那么我想看到:

"this is not valid"
Do you want to try again <y/n>?

我已经尝试了很多组合,如果,否则,但我没有看到那个"do you want to try again?"或者我看到它们和结果。

这是无效的,最大值为:0

那不好。

int invoer;
int max;
string repeat;
Console.WriteLine("Please give a positive number.'nIf you enter a negative number its not going to work");
do
{
    invoer = 0;
    max = 0;
    repeat = "";
    for (int i = 1; invoer >= 0; i++)
    {
        Console.Write(i + "> ");
        invoer = int.Parse(Console.ReadLine());
        if (max < invoer)
            max = invoer;
    }
    Console.WriteLine("Maximum value is: " + max);
    Console.WriteLine("do you want to try again? y/n: ");
    repeat = Console.ReadLine();
} while (repeat == "y" || repeat == "Y");

如何修复此循环

我为您编辑了这段代码。它询问用户无限的时间正值是多少。仅当输入的值为最大值时,它才会给出最大值。如果值为负,它不会给出最大值......我相信这就是你想要的?

但是,此代码很糟糕。我用它修复了我能做的。如果它不是你要找的,那就报废它,重新开始,因为这种操作方式的丑陋使得运行起来比应有的更困难。

如果这是答案,请检查。

    int invoer;
    int max;
    string repeat;
    Console.WriteLine("Please give a positive number.'nIf you enter a negative number its not going to work");
    do
    {
        invoer = 0;
        max = 0;
        repeat = "";
        for (int i = 0; invoer >= 0; i++)
        {
            Console.Write(i + "> ");
            invoer = int.Parse(Console.ReadLine());
            if (max < invoer)
            {
                max = invoer;
                Console.WriteLine("Maximum value is: " + max);
            }
        }
        if (invoer < 0)
        {
            Console.WriteLine("This is not valid...");
        }

        Console.WriteLine("do you want to try again? y/n: ");
        repeat = Console.ReadLine();
    } 
    while (repeat == "y" || repeat == "Y");
}
}
}
你应该

使用 uint。TryParse 而不是 int。解析。它不接受负数,也不会在无效输入时引发异常。

如果你不能使用 int。TryParse,在解析之前,您始终可以确保您的输入是数字:

var input = Console.ReadLine();
var number = !string.IsNullOrWhiteSpace(input) ? input : "0";
var numeralExpression = new System.Text.RegularExpressions.Regex(@"^('d|-'d)$");
if (numeralExpression.IsMatch(number))
{
    invoer = int.Parse(number);
}