编辑。 根据收到的答案,我意识到在我的学习的早期阶段,我的要求比我所知的要多,因此,我决定忘记这个问题,直到我学会了解并了解更多。我不想超越并迷惑自己。
只是一个寻找指导的新手。
从我在这里问过的上一个问题,我被介绍到goto Start;在switch语句中。
我开始使用它,它让我觉得我希望程序在用户输入无效输入的情况下开始。例如,在我的下面的计算器中,如果用户输入的数字不是数字,我如何让程序忽略输入并再次提示用户输入数字?甚至可能显示"无效输入。请再试一次#34;给用户。
现在,如果输入任何数字,控制台崩溃并抛出错误。
预先感谢您的协助
int num1, num2, output;
string op;
Console.Write("\n\n");
Console.WriteLine("Calculator\n");
Console.WriteLine("=============");
Console.Write("\n\n");
Start:
Console.Write("Please enter first number:");
num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Please enter second number: ");
num2 = Convert.ToInt32(Console.ReadLine());
Operator:
Console.WriteLine("Please select operator: ");
Console.WriteLine("\nAddition : +");
Console.WriteLine("Multiplication: *");
Console.WriteLine("Division: /");
Console.WriteLine("Subtraction: -");
Console.Write("Enter Operator: ");
op = Console.ReadLine();
switch (op)
{
case "+":
output = num1 + num2;
Console.WriteLine("{0} added to {1} = {2}", num1, num2, output);
break;
case "*":
output = num1 * num2;
Console.WriteLine("{0} multiplied by {1} = {2}", num1, num2, output);
break;
case "/":
if (num2 == 0)
{
Console.WriteLine("Cannot divide by zero. Please try again");
goto Start;
}
else
{
output = num1 / num2;
Console.WriteLine("{0} divided by {1} = {2}", num1, num2, output);
break;
}
case "-":
output = num1 - num2;
Console.WriteLine("{0} minus{1} = {2}", num1, num2, output);
break;
default:
Console.WriteLine("You entered an invalid operator. Please try again\n");
goto Operator;
}
Console.WriteLine("\nPress enter to continue....");
Console.ReadLine();
答案 0 :(得分:3)
请不管你做什么,都要不使用goto
。永远。可能除了在switch
中落到其他case
之外,但即使这样也应该非常罕见。它使您的代码难以理解,令人困惑且难以维护。请参阅spaghetti code。
也就是说,如果您不确定输入是否有效,则应该Int32.TryParse
而不是Convert
:
int num1;
do
{
Console.Write("Please enter first number:");
} while (!Int32.TryParse(Console.ReadLine(), out num1));
并将switch
更改为此类内容(以避免goto
):
bool inputOk = false;
while (!inputOk)
{
Console.WriteLine("Please select operator: ");
//...
op = Console.ReadLine();
inputOk = true;
switch (op)
{
//...
default:
Console.WriteLine("You entered an invalid operator. Please try again\n");
inputOk = false;
break;
}
}
答案 1 :(得分:1)
未经测试,但这可能是您想要的:
Start:
Console.Write("Please enter first number:");
if (!int.TryParse(Console.ReadLine(), out num1))
goto Start;
//num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Please enter second number: ");
num2 = Convert.ToInt32(Console.ReadLine());
Operator:
...
如果需要,也许对于num2也是一样。
答案 2 :(得分:1)
答案 3 :(得分:1)
答案 4 :(得分:1)
我不认为goto语句适合这种情况。如果你有很多代码,你的代码可能会变得非常混乱。也不建议使用FormatException
,因为抛出异常需要很长时间。
我认为你应该使用Int32.TryParse
代替。
这是一段示例代码。看看你是否可以将它应用到你的程序中。
int input;
while(true) {
Console.WriteLine("Please enter a number");
bool succeeds = Int32.TryParse(Console.ReadLine(), out input);
if (!succeeds) {
Console.WriteLine("Input Invalid! Try again!");
} else {
break;
}
}
// make use of input here
答案 5 :(得分:1)
insert into [REMARKS]
values((SELECT top 1 ref_no
FROM A_MASTER order by ref_no desc ), (SELECT top 1 current_dept
FROM A_MASTER order by ref_no desc ),'630590', GETDATE(),null)