C# 如何创建一个循环,在用户每次输入无效数据类型时提示用户输入数据?

C# 如何创建一个循环,在用户每次输入无效数据类型时提示用户输入数据?,c#,C#,在它的当前状态下,代码只在用户第一次输入错误数据后提示用户,我想知道如何使它每次都发生 -谢谢您可以使用TryParse()将输入字符串转换为double,如果转换失败,将返回false;根据该输入,您可以提示用户输入是否有效。这将循环直到用户输入Exit Console.WriteLine("Enter value for Monday : "); milesMon = Console.ReadLine(); try {

在它的当前状态下,代码只在用户第一次输入错误数据后提示用户,我想知道如何使它每次都发生

-谢谢

您可以使用
TryParse()
将输入字符串转换为double,如果转换失败,将返回false;根据该输入,您可以提示用户输入是否有效。这将循环直到用户输入
Exit

        Console.WriteLine("Enter value for Monday : ");
        milesMon = Console.ReadLine();



        try
        {
            dblMon = double.Parse(milesMon);



        }
        catch
        {
            Console.WriteLine("You entered an invalid number - a default of 0 has been set");
            dblMon = 0;

            while (true) break;

                Console.WriteLine("Enter value for Monday : ");
            milesMon = Console.ReadLine();

基本上你想要写一个循环。当输入无效时,提示用户。因此,您应该有一个名为
valid
bool
变量来指示输入是否有效。而不是像这样的一个while循环:

 string inputVal = "";
 double inputDoubleVal;
 while (inputVal == "Exit")
   {
      Console.WriteLine("Enter value for Monday : ");
      inputVal = Console.ReadLine();
      if (double.TryParse(inputVal, out  inputDoubleVal))
       {
          //Process with your double value
       }
      else
       {
         Console.WriteLine("You entered an invalid number - a default of 0 has been set");
       }
   }
while (!valid) {
    //...
}
在while循环中,提示用户。代码如下所示:

 string inputVal = "";
 double inputDoubleVal;
 while (inputVal == "Exit")
   {
      Console.WriteLine("Enter value for Monday : ");
      inputVal = Console.ReadLine();
      if (double.TryParse(inputVal, out  inputDoubleVal))
       {
          //Process with your double value
       }
      else
       {
         Console.WriteLine("You entered an invalid number - a default of 0 has been set");
       }
   }
while (!valid) {
    //...
}

希望这有帮助

您可以使用递归创建无端点循环,而无需使用
for
while
。 另外,与其使用try-catch语句,不如使用
TryParse

文件编号:


您应该使用do或while循环来不断重复提示,直到输入有效的double。您还应该考虑添加某种形式的退出关键字。比如他们进入“退出,退出,q”等等。。让它终止应用程序,而不是循环。然而,作为一个控制台应用程序,ctrl+c将关闭它,不管它在做什么(这是kill命令),但不是每个人都知道这一点

public int readInput(){
  int val = 0;
  Console.WriteLine("Enter a valid int");
  string enteredVal = Console.ReadLine();
  bool result = int.TryParse(enteredVal, out val);
  if(result)
    return val;
  Console.writeLine("Try again, only int values allowed");
  return readInput();
}


int val = readInput();

你不也需要一个退出条件吗?如果您在需要一些条件来中断循环的同时添加。否则,它将是无限的。
Convert.ToInt32
parse
相同,它将引发异常,但失败convert@un-幸运的是,如果抛出异常,catch块将捕获它。循环将开始另一个迭代。在程序流中使用异常是一个非常糟糕的主意。这就是为什么将TryParse方法添加到框架中以避免this@un-幸运的是,我同意。Try-catch应用于捕获意外错误,如如果这是计算器控制台输入,则为除零错误。在可能的情况下,流量问题应始终在不使用try/catch的情况下解决。好得多,先生。感谢汉克斯工作得很好:)