做循环练习
本文关键字:练习 循环 | 更新日期: 2023-09-27 18:35:56
static void Main(string[] args)
{
int output = 0;
int number = 0;
Console.WriteLine("Please input a number for it to be counted!");
bool conversion = int.TryParse(Console.ReadLine(), out output);
if( number >= 1000)
{
while (number <= output)
{
switch (conversion)
{
case true:
Console.Write(number + " ");
number += 2;
break;
case false:
Console.WriteLine("ERROR INVALID INPUT!");
break;
}
}
}
else
{
Console.WriteLine("APPLICATION ERROR: NUMBER MUST BE BELOW OR AT 1000 TO PREVENT OVERFLOW!");
}
string choice = Console.ReadLine();
do // Here is the beginning of the do code
{
Console.WriteLine("Do you want to continue - Yes or No");
if(choice.ToUpper() != "NO" && choice.ToUpper() != "NO");
{
Console.WriteLine("ERROR INVALID INPUT: Only input Yes or No!");
}
}while(choice.ToUpper() != "YES" && choice.ToUpper() != "NO");
}
}
}
这是一个非常简单的应用程序,尚未完成,但它的作用是输入一个低于或等于 1000 的数字,然后均匀地计数。我唯一的问题是代码末尾的 do 语句。它尚未完成,但根据我的研究,do 语句已完成,如果用户不输入是或否,它将向他们显示该错误,然后再次询问"你想再去一次"但是,由于这个 do 语句,我输入了任何数字,例如 10,它给了我错误说它超过 1000,然后继续无限循环说"错误无效输入: 只输入是或否!我该如何解决这个问题?
您的 if 语句两次测试不等于"否",我假设您的意思是检查不等于"是"和不等于"否"
你的无限循环是因为条件检查了choice
的内容,但你永远不会在 do 循环中更改变量的值 - 只在循环开始前的Console.ReadLine()
中。
您应该在要重复的代码之前启动 do 循环。例如,如果你的意图是,如果用户键入 yes 表示整个过程重复,那么最好通过创建一个 void 函数来服务,比如static void CountNumbers() { ... }
,它让所有代码都输入你输入的计数、错误处理等。然后,您可以使用 do 循环轻松地重复用户想要的任意内容,如下所示:
string choice = null;
do
{
CountNumbers();
// Your code here to ask if user wants to continue and readline to get the new choice
} while ( /* Existing condition */);
代码中有几个问题:
首先,您的条件检查number
是否大于或等于 1000。由于您输入的是 10
,这不是>= 1000
,那么你得到了else
语句。因此,您需要将条件更改为:
if(number <= 1000)
接下来,您在do
循环中的条件会检查相同的条件两次......您不允许用户输入"是"。您应该修改条件以包括对"是"的检查。此外,您需要从同一 if
语句的末尾删除分号:
do
{
Console.WriteLine("Do you want to continue - Yes or No");
choice = Console.ReadLine();
if(choice.ToUpper() != "NO" && choice.ToUpper() != "NO");
{
Console.WriteLine("ERROR INVALID INPUT: Only input Yes or No!");
}
} while(choice.ToUpper() != "YES" && choice.ToUpper() != "NO");
您还可以考虑的一件事是添加一个方法来从用户那里获取整数,因为将其包装在某些验证中很方便:
public static int GetIntFromUser(string prompt,
string errorMessage = "Invalid entry. Please try again.")
{
int value;
while (true)
{
if (prompt != null) Console.Write(prompt);
if (int.TryParse(Console.ReadLine(), out value)) break;
if (errorMessage != null) Console.WriteLine(errorMessage);
}
return value;
}
然后,当您需要从用户那里获取 int 时,可以调用此方法。下面是如何使用它的示例:
private static void GenericTester()
{
// This will flag that the user wants to quit
bool quit = false;
while(!quit)
{
// Get input from user
int userInput = GetIntFromUser("Please input a number to be counted: ");
int number = 0;
// Write out the numbers
if (userInput <= 1000)
{
while (number <= userInput)
{
Console.Write(number + " ");
number += 2;
}
}
else
{
Console.WriteLine("APPLICATION ERROR: NUMBER MUST BE BELOW " +
"OR AT 1000 TO PREVENT OVERFLOW!");
}
// See if they want to continue
while (true)
{
// Get user input
Console.Write("Do you want to continue - Yes or No: ");
string choice = Console.ReadLine();
// If they said 'No', set flag to quit and break out of this loop
if (choice.Equals("No", StringComparison.OrdinalIgnoreCase))
{
quit = true;
break;
}
// If they said 'Yes', just break out of this loop
if (choice.Equals("Yes", StringComparison.OrdinalIgnoreCase)) break;
// Otherwise, display an error message and let the loop continue
Console.WriteLine("ERROR INVALID INPUT: Only input Yes or No!");
}
}
}