限制用户输入为指定的一组值

11 浏览
0 Comments

限制用户输入为指定的一组值

我在我的第一个类中有一个do while循环,目标是循环,直到用户输入英尺、米或码为止:\n

string convert = "";
do
{
    Console.Clear();
    Console.WriteLine("What conversion: Feet, Meters, Yards");
    try
    {
        convert = Convert.ToString(Console.ReadLine());
    }
    catch (Exception)
    {
        Console.Clear();
        Console.WriteLine("Incorrect conversion");
        Console.ReadKey();
    }
    convert = Values.Input(convert);
    Console.WriteLine(convert);
    Console.ReadKey();
} while (_____);  // 尝试在我的其他类中抛出参数时循环
Console.WriteLine("Continue on");
Console.ReadLine();

\n我的单独的values类Input方法:\n

public static string Input(string input)
{
    string convert = input;
    if (convert == "Meters")
    {
        input = "Meters";
    }
    else if (convert == "Feet")
    {
        input = "Feet";
    }
    else if (convert == "Yards")
    {
        input = "Yards";
    }
    else 
    {
        throw new System.ArgumentException("Incorrect conversion");
        //如果在这里抛出ArgumentException,我尝试循环我的主程序
    }
    return input;
}

\n我的尝试:\n

} while (convert != "Meters" || convert != "Feet" || convert != "Yards"); 
Console.WriteLine("Continue on");
Console.ReadLine();

\n我尝试告诉它在convert不是Meters、Feet或Yards时继续循环,但在抛出参数后,我无法继续执行程序。\n我能在抛出这个System.ArgumentException之后继续我的应用吗?如果可以,我应该输入什么来允许这个while循环?

0
0 Comments

【问题】:如何将用户输入限制为指定值集合中的一个值?

【原因】:旧的Input()函数没有对用户输入进行任何处理,需要将其替换为能够限制输入值的新函数。

【解决方法】:将Input()函数替换为以下代码块:

public enum Unit { Meters, Feet, Yards }

public static Unit Input(string input)

{

switch (input.ToLowerInvariant())

case "meters": return Unit.Meters;

case "feet": return Unit.Feet;

case "yards": return Unit.Yards;

default: throw new System.ArgumentException("Incorrect conversion");

}

}

接下来,修复代码如下:

Unit unit;

while (true)

{

Console.WriteLine("What conversion: Feet, Meters, Yards");

try

{

var input = Console.ReadLine();

unit = Values.Input(convert);

break; // 如果没有抛出异常,可以退出循环

}

catch

{

Console.WriteLine("Incorrect conversion");

}

}

Console.WriteLine("Continue on");

Console.ReadLine();

对于(input.ToLowerInvariant())这一行,它的作用是将输入转换为小写。但是,应该始终考虑输入的字符集。以下是一个能够解释的好问题:stackoverflow.com/questions/6225808/…

0
0 Comments

问题的原因是在调用Values.Input()的位置在try/catch语句之外,当出现异常时,它不会在定义的catch中处理。因此,它会被调用堆栈捕获。尝试将Values.Input(..)放在try/catch语句内部。

解决方法是将Values.Input(..)放在try/catch语句内部,代码如下:

string convert = "";
do
{
    Console.Clear();
    Console.WriteLine("What conversion: Feet, Meters, Yards");
    try
    {
        convert = Convert.ToString(Console.ReadLine());
        // -------  PASTE
        convert = Values.Input(convert);
        Console.WriteLine(convert);
        // -----
    }
    catch (Exception)
    {
        Console.Clear();
        Console.WriteLine("Incorrect conversion");
    }
    // XXXXXXXXX CUT
    // XXXXXXXXX
    Console.ReadKey();
} while (_____); //Trying to loop while argument is thrown from my other class
Console.WriteLine("Continue on");
Console.ReadLine();

0