要求输入三次,我的代码出了什么问题?

时间:2015-06-23 09:48:35

标签: c#

static void Main(string[] args)
{
    string name;
    int age;

    Console.WriteLine("How old are you?");

    string input = Console.ReadLine();
    if (int.TryParse(input, out age))
    {
        {
            agedetermine();
        }
    }
    else
    {
        Console.WriteLine("Give me an actual answer...");
        while (!int.TryParse(Console.ReadLine(), out age))
            Console.WriteLine("I don't have all day.");
        while (int.TryParse(Console.ReadLine(), out age))
        {
            agedetermine();
        }
    }

}

agedetermine()仅包含 if Console.WriteLine 无相关

对于第一个 input = Console.ReadLine 我故意输入非整数来触发 else ,但之后我必须为程序输入三次整数回复。有人可以告诉我为什么,也给我一个正确的编码? 我刚开始昨天,所以我什么都不知道,所以请解释你在我的代码中引入的任何新术语的功能。

3 个答案:

答案 0 :(得分:7)

您的上一个while (int.TryParse(Console.ReadLine(), out age))错过了!

现在它循环直到你输入了一些不好的东西,而不是相反。

这应该是最后一个while(虽然没用):

while (!int.TryParse(Console.ReadLine(), out age))

防止代码重复的一个小建议:使用do...while

do
{
    Console.WriteLine("How old are you?");
}
while (!int.TryParse(Console.ReadLine(), out age));

agedetermine();

甚至扩展了消息:

int age;

string[] messages = new string[] { "How old are you?"
                                 , "Give me an actual answer..."
                                 , "I don't have all day."
                                 };
int numberOfTries = 0;
do
{
    if (numberOfTries >= messages.Length)
    {
        Console.WriteLine(messages[messages.Length - 1]);
    }
    else
    {
        Console.WriteLine(messages[numberOfTries]);
    }

    numberOfTries++;
}
while (!int.TryParse(Console.ReadLine(), out age));

agedetermine();

答案 1 :(得分:1)

你的最后一句if语句缺少NOT部分

while (int.TryParse(Console.ReadLine(), out age))

应该是

while (!int.TryParse(Console.ReadLine(), out age))

答案 2 :(得分:1)

只需简化代码,根本不需要上一个while循环。

static void Main(string[] args)
{
    string name;
    int age;

    Console.WriteLine("How old are you?");

    string input = Console.ReadLine();
    {
        if (int.TryParse(input, out age))
        {
            {
                agedetermine();
            }
        }
        else
        {
            Console.WriteLine("Give me an actual answer...");
            while (!int.TryParse(Console.ReadLine(), out age))
                Console.WriteLine("I don't have all day.");
            agedetermine();

        }
    }
}