0

我对循环很熟悉,但循环一个过程让我感到困惑:

如果用户输入一个非整数,我希望再次提示“你的年龄”这个问题,直到用户输入一个整数

 Console.WriteLine("Your age:");
 string line = Console.ReadLine();
 if (!int.TryParse(line, out age))
 {
     Console.WriteLine("{0} is not an integer", line);

 }
4

5 回答 5

7

尝试

int age;

Console.WriteLine("Your age:");
string line = Console.ReadLine();
while (!int.TryParse(line, out age))
{
    Console.WriteLine("{0} is not an integer", line);
    Console.WriteLine("Your age:");
    line = Console.ReadLine();
}

我不确定循环进程是什么意思。您正在循环获取用户输入并尝试解析该输入。

您主要可以使用whiledofor或 (gulp!don't do it!) goto来完成此操作。

于 2012-09-23T08:07:36.847 回答
6

试试这个,它会让“你的年龄:”重复,直到你有正确的输入:

int age;
while(true)
{
    Console.WriteLine("Your age:");
    string line = Console.ReadLine();

    if (!int.TryParse(line, out age))
       Console.WriteLine("{0} is not an integer", line);

    else break;
}
于 2012-09-23T08:09:32.870 回答
2

我已经使用了这种方法。我不知道这是否会降低性能,但我发现使用正则表达式很酷。让我知道这是否适合你

将此添加到顶部

using System.Text.RegularExpressions;

然后使用以下内容:

            bool bEnteredNumberNotValid = true;
            while (bEnteredNumberNotValid)
            {
                Console.WriteLine("Your age:");
                string sAge = Console.ReadLine();

                string regString = "(^[0-9]+$)"; //REGEX FOR ONLY NUMBERS

                Regex regVal = new Regex(regString, RegexOptions.IgnoreCase | RegexOptions.Singleline); //REGEX ENGINE
                Match matVal = regVal.Match(sAge); //REGEX MATCH WITH THE INPUT
                if (!matVal.Success) // IF THERE IS NO MATCH, SHOW THE BELOW
                {
                    Console.WriteLine("{0} is not an integer", sAge);
                }
                else // ELSE SET bEnteredNumberNotValid FALSE AND GET OUT.
                {
                    bEnteredNumberNotValid = false;
                    Console.WriteLine("Press any key to continue...");
                    Console.ReadLine();
                }
            }

输出!

单击此处查看上述程序的输出

希望这可以帮助。

于 2012-09-23T10:00:35.370 回答
1

如果我理解你的问题,你为什么不做

Console.WriteLine("Your age:");
string line = Console.ReadLine();
while (!int.TryParse(line, out age))
{
    Console.WriteLine("{0} is not an integer", line);
    Console.WriteLine("Your age:");
    line = Console.ReadLine();
}
于 2012-09-23T08:08:08.833 回答
0

我只知道递归函数来实现这一点,但不建议这样做,因为它容易出错并且使程序过于复杂。

在班上

 string line;
 int age = 0;

在主要

 Console.WriteLine("Your age:");   
 line  = Console.ReadLine();  
 checkFunction();

声明一个方法

public int checkFunction()
{
  if (!int.TryParse(line, out age))
  {
    Console.WriteLine("{0} is not an integer", line);
    line = Console.ReadLine();
    return checkFunction();
  }
  else
  {
    return age;
  }
}
于 2012-09-23T08:11:42.103 回答