做循环练习

本文关键字:练习 循环 | 更新日期: 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!");
        }
    }
}