我如何重新设计此代码以避免转到?
How do I redesign this code to avoid goto?
嗯,我遇到这个问题是因为我开始使用 C# 并编写了一个控制台计算器,但是我在其中使用了 goto
并且听说不能使用它,但我不知道还有什么使它按照我想要的方式工作的说明。我把我的代码(不长)贴在这里,所以也许你可以看看它并给我一些提示。谢谢!
base:
Console.WriteLine("First number");
double first = double.Parse(Console.ReadLine());
Console.WriteLine("Second number");
double second = double.Parse(Console.ReadLine());
Console.WriteLine("What operation do you want to perform? \n1 - addition \n2 - subtraction \n3 - multiplication \n4 - division");
string choice = Console.ReadLine();
if (choice == "1")
{
Console.WriteLine(first + second);
Console.ReadLine();
}
if (choice == "2")
{
Console.WriteLine(first - second);
Console.ReadLine();
}
if (choice == "3")
{
Console.WriteLine(first * second);
Console.ReadLine();
}
else if (choice == "4" && second == 0)
{
Console.WriteLine(" Do not divide by zero");
}
if (choice == "4")
{
Console.WriteLine(first / second);
Console.ReadLine();
}
Console.WriteLine("Next one? \n1 - Yes \n2 - No");
string chc2 = Console.ReadLine();
if (chc2 == "1")
{
goto base;
}
if (chc2 == "2")
{
Console.WriteLine("Bye bye");
Console.ReadKey();
}
使用循环。这是一种常见的方式:
while (true) {
// do some stuff
Console.WriteLine("Next one? \n1 - Yes \n2 - No");
string chc2 = Console.ReadLine();
if (chc2 == "1")
{
continue; // means go back to the top of the loop
}
if (chc2 == "2")
{
Console.WriteLine("Bye bye");
Console.ReadKey();
break; // means break out of the loop
}
}
这是您重构的代码和改进的用户体验:
string userInput;
do
{
Console.WriteLine("Enter first number:");
double operandFirst = double.Parse(Console.ReadLine());
Console.WriteLine("Enter second number:");
double operandSecond = double.Parse(Console.ReadLine());
double? result = null;
bool isValid = true;
do
{
Console.WriteLine();
Console.WriteLine("Select the operation you want to perform:");
Console.WriteLine("1 - Addition");
Console.WriteLine("2 - Subtraction");
Console.WriteLine("3 - Multiplication");
Console.WriteLine("4 - Division");
userInput = Console.ReadLine();
switch ( userInput )
{
case "1":
result = operandFirst + operandSecond;
break;
case "2":
result = operandFirst - operandSecond;
break;
case "3":
result = operandFirst * operandSecond;
break;
case "4":
if ( operandSecond == 0 )
Console.WriteLine("Can't divide by zero.");
else
result = operandFirst / operandSecond;
break;
default:
Console.WriteLine("Unknown selected operation.");
isValid = false;
break;
}
}
while ( !isValid );
if ( result.HasValue )
Console.WriteLine("Result = " + result);
Console.WriteLine();
Console.WriteLine("Retry?");
Console.WriteLine("1 - Yes");
Console.WriteLine("2 - No");
userInput = Console.ReadLine();
Console.WriteLine();
}
while ( userInput != "2" );
Console.WriteLine("Bye bye.");
Console.WriteLine("Press a key to exit.");
Console.ReadKey();
嗯,我遇到这个问题是因为我开始使用 C# 并编写了一个控制台计算器,但是我在其中使用了 goto
并且听说不能使用它,但我不知道还有什么使它按照我想要的方式工作的说明。我把我的代码(不长)贴在这里,所以也许你可以看看它并给我一些提示。谢谢!
base:
Console.WriteLine("First number");
double first = double.Parse(Console.ReadLine());
Console.WriteLine("Second number");
double second = double.Parse(Console.ReadLine());
Console.WriteLine("What operation do you want to perform? \n1 - addition \n2 - subtraction \n3 - multiplication \n4 - division");
string choice = Console.ReadLine();
if (choice == "1")
{
Console.WriteLine(first + second);
Console.ReadLine();
}
if (choice == "2")
{
Console.WriteLine(first - second);
Console.ReadLine();
}
if (choice == "3")
{
Console.WriteLine(first * second);
Console.ReadLine();
}
else if (choice == "4" && second == 0)
{
Console.WriteLine(" Do not divide by zero");
}
if (choice == "4")
{
Console.WriteLine(first / second);
Console.ReadLine();
}
Console.WriteLine("Next one? \n1 - Yes \n2 - No");
string chc2 = Console.ReadLine();
if (chc2 == "1")
{
goto base;
}
if (chc2 == "2")
{
Console.WriteLine("Bye bye");
Console.ReadKey();
}
使用循环。这是一种常见的方式:
while (true) {
// do some stuff
Console.WriteLine("Next one? \n1 - Yes \n2 - No");
string chc2 = Console.ReadLine();
if (chc2 == "1")
{
continue; // means go back to the top of the loop
}
if (chc2 == "2")
{
Console.WriteLine("Bye bye");
Console.ReadKey();
break; // means break out of the loop
}
}
这是您重构的代码和改进的用户体验:
string userInput;
do
{
Console.WriteLine("Enter first number:");
double operandFirst = double.Parse(Console.ReadLine());
Console.WriteLine("Enter second number:");
double operandSecond = double.Parse(Console.ReadLine());
double? result = null;
bool isValid = true;
do
{
Console.WriteLine();
Console.WriteLine("Select the operation you want to perform:");
Console.WriteLine("1 - Addition");
Console.WriteLine("2 - Subtraction");
Console.WriteLine("3 - Multiplication");
Console.WriteLine("4 - Division");
userInput = Console.ReadLine();
switch ( userInput )
{
case "1":
result = operandFirst + operandSecond;
break;
case "2":
result = operandFirst - operandSecond;
break;
case "3":
result = operandFirst * operandSecond;
break;
case "4":
if ( operandSecond == 0 )
Console.WriteLine("Can't divide by zero.");
else
result = operandFirst / operandSecond;
break;
default:
Console.WriteLine("Unknown selected operation.");
isValid = false;
break;
}
}
while ( !isValid );
if ( result.HasValue )
Console.WriteLine("Result = " + result);
Console.WriteLine();
Console.WriteLine("Retry?");
Console.WriteLine("1 - Yes");
Console.WriteLine("2 - No");
userInput = Console.ReadLine();
Console.WriteLine();
}
while ( userInput != "2" );
Console.WriteLine("Bye bye.");
Console.WriteLine("Press a key to exit.");
Console.ReadKey();