如何使这个 C# 程序不断循环,直到用户输入整数?

How do make this C# program keep looping until the user has entered an integer?

提问人:valeria 提问时间:9/24/2023 最后编辑:valeria 更新时间:9/24/2023 访问量:66

问:

我希望程序不断要求用户输入一个数字,直到他们最终使用正确的数据类型,而不仅仅是退出程序。这就是我写的。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test1
{
    class Program
    {
        static void Main(string[] args)
        {
            //declare and initialize variables
            int a = 0;
            int b = 0;
            int area = 0;
            string read;
            
            do { 
                try
                {
                    //input data solicited
                    Console.WriteLine("Rectangle height: ");
                    read = Console.ReadLine();
                    a = int.Parse(line);

                    Console.WriteLine("Rectangle width: ");
                    read = Console.ReadLine();
                    b = int.Parse(line);

                    //operation
                    area = a * b;

                    //print result
                    Console.WriteLine("The area of the rectangle is: " + area + " cm²");
                    
                }
                catch (Exception e)
                {
                    Console.WriteLine("ERROR. Wrong data type.");
                }
            }while (e);
        }
    }
} 

我尝试使用布尔值作为随机猜测,使 do-while 循环继续进行,直到用户成功输入整数,但这也没有用。你在底部看到的也是一个疯狂的猜测。while (e);

                    Console.WriteLine("The area of the rectangle is: " + area + " cm²");
                    cont = false; 
                    
                }
                catch (Exception e)
                {
                    Console.WriteLine("ERROR. Ingresa un numero entero.");
                    cont = false; 
                }
            }while (cont);

我不能为此使用 if 语句。

C# 循环 异常 visual-studio-2022 do-while

评论

2赞 Wyck 9/24/2023
为什么不能使用语句?一个恶毒的规则制定者会囚禁你吗?你需要救援吗?;)但说真的,你能在块的末尾使用吗?这样,异常将跳转到块,并跳过 and 循环重试。ifwhile (true)breaktrycatchcatchbreak
0赞 valeria 9/24/2023
@Wyck 这是一个硬件分配:(。你的建议似乎奏效了!谢谢:D

答:

1赞 hzmstr 9/24/2023 #1

有两种方法可以让它循环直到数字。

一种方法是创建一个以 false 开头的布尔值,然后循环直到布尔值为 true,所以如果成功,则不会继续循环。

另一种方法是创建一个 but with on end of stack。do {} while (true)breaktry

由于代码到达末尾(是或),因此需要代码才能正常工作。breakisValid = true

如果你愿意,你可以用变量类型检查替换 try {},如果它是一个数字,那么继续,如果有其他任何内容,继续循环(使用否定条件)。

使用变量

...
static void Main(string[] args)
{
    // declare and initialize variables
    int a = 0;
    int b = 0;
    int area = 0;
    string read;
    bool isValid = false;

    while (!isValid) { 
        try
        {
            // Input data solicited
            Console.WriteLine("Rectangle height: ");
            read = Console.ReadLine();
            a = int.Parse(read);

            Console.WriteLine("Rectangle width: ");
            read = Console.ReadLine();
            b = int.Parse(read);

            //operation
            area = a * b;

            //print result
            Console.WriteLine("The area of the rectangle is: " + area + " cm²");
            isValid = true;
            
        }
        catch (Exception e)
        {
            Console.WriteLine("ERROR. Wrong data type, expected number.");
        }
    };
}
...

使用休息

...
static void Main(string[] args)
{
    // declare and initialize variables
    int a = 0;
    int b = 0;
    int area = 0;
    string read;

    do { 
        try
        {
            ...
            break
            
        }
        catch (Exception e)
        {
            ...
        }
    } while (true);
}
...

此外,中有一个错误,没有行 var。与变量 b 相同。a = int.Parse(line)