C# 如何修复此循环?

C# 如何修复此循环?,c#,loops,C#,Loops,我有一个简单的代码问题。我想做的是:例如,如果用户只给出一个负数,而不是正数,那么我想看到: "this is not valid" Do you want to try again <y/n>? 您应该使用uint.TryParse而不是int.Parse。它不会接受负数,也不会对无效输入引发异常 如果您不能使用int.TryParse,您可以在解析输入之前始终确保输入是数字: var input = Console.ReadLine(); var number = !stri

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

"this is not valid"

Do you want to try again <y/n>?

您应该使用uint.TryParse而不是int.Parse。它不会接受负数,也不会对无效输入引发异常

如果您不能使用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);
}

我为你编辑了这段代码。它会无限期地询问用户正值是多少。如果输入的值是最大值,它只给出最大值。如果值为负,它不给出最大值。。。我相信这就是你想要的

然而,这段代码很可怕。我尽我所能把它修好了。如果它不是你想要的,那就放弃它,重新开始吧,因为它运行方式的丑陋使得它比它应该的运行更加困难

如果这是答案,请检查

    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");
}
}
}
int发票人;
int max;
字符串重复;
Console.WriteLine(“请给出一个正数。\n如果输入负数,它将不起作用”);
做
{
发票=0;
max=0;
重复“”;
对于(int i=0;发票>=0;i++)
{
控制台。写入(i+“>”);
invore=int.Parse(Console.ReadLine());
如果(最大值<发票人)
{
最大值=发票人;
Console.WriteLine(“最大值为:”+max);
}
}
如果(发票人<0)
{
Console.WriteLine(“这是无效的…”);
}
Console.WriteLine(“您想再试一次吗?是/否:”);
repeat=Console.ReadLine();
} 
while(repeat==“y”| repeat==“y”);
}
}
}

请先修复缩进!您需要使用
TryParse
而不是
Parse
,然后查看bool结果,看看是否需要再次询问。是的,这就是答案。谢谢@RBarryYoung。现在我知道“想要”的字母比“想要”少。bravo@hvd或者可能是“字母”和“字符”之间的区别?更不用说“性格”了:)@hvd-Uhmm。。。是的,我需要更多的咖啡…但问题是,我不知道什么是特里帕斯。这是一种家庭作业。我不能使用我没有学过的任何其他代码。你确定你没有学过吗?谢谢你,但正如我之前所说,这对我的水平来说太复杂了。我想做的就是。İ如果第一个值为负值,程序必须提供再次执行该操作的机会……并显示错误消息。这样是无效的。你想再试一次吗?是的,但我已经试过了。结果是这是无效的,但程序也试图找到最大值。是的,但我已经试过了。您还可以看到我不想看到的“最大值=0”。@user2880279另外,您可能希望实现一种退出程序的方法。您的硬件作业可能不需要它,我也不知道,但这对您来说是一个很好的实践。嘿,对不起,您的代码不正确。为什么?因为如果示例5中的用户写了,那么它会说:最大值5。然后他会跳到2号,然后再次尝试找到最大值。Console.WriteLine(“最大值为:”+max);就是必须到外面去loop@user2880279我不知道你这是什么意思?要了解一个程序是如何工作的,请在Visual Studio中按住F11键,它将带您逐步完成该程序。它不在循环之外吗?它不会在每次输入整数时打印最大值。这将是重复的,而且很快就会变老。如果你出于任何原因想要它,有很多方法可以添加它。但我刚才检查了代码,它可以按照您的要求工作。
    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");
}
}
}