根据用户输入决定要打印的文本

时间:2014-10-25 17:33:19

标签: c# console-application user-input

这是我的第一个编程课程,我对一些概念很难。

我要做的是弹出一个框,询问用户是否有整数,这是有效的。

之后,如果整数为负,则应说“输入正数”。 然后,如果它是0,它应该说“输入一个非零数字”。

最后,如果它是偶数,它应循环四次, 如果它是一个奇数,它应该循环四次。

static void Main(string[] args)
{
    Console.WriteLine("Enter an integer:");
    string line = Console.ReadLine(); // Read string from console
    int value;
    if (int.TryParse(line, out value)) // Try to parse the string as an integer
    {
        Console.Write("Enter a positive number:");
        Console.WriteLine(); // Multiply the integer and display it
    }
    else if (int.TryParse(line, out value))
    {
        Console.Write("Enter a non-zero number:");
        string line1 = Console.ReadLine();
        Console.WriteLine();

4 个答案:

答案 0 :(得分:3)

你的条件分支有点偏。无论输入的是什么整数,您都会提示用户“输入正数”。在您的第一个if分支内,您需要评估该数字是正数还是负数,并确定下一步该做什么。如果输入的字符串根本无法解析为整数,则TryParse将仅为false。

    if (int.TryParse(line, out value)) // Try to parse the string as an integer
    {
        // User entered a valid integer. Now check value<0 or value==0, else do your looping
    } else {
        // What user entered wasn't an integer at all. Show error.
    }

请注意,您实际上不需要再阅读用户的任何输入。您需要的所有信息都在第一个ReadLine之后提供。

答案 1 :(得分:2)

整数可能是负数,因此您的测试不正确。 &#34; -12&#34;将按预期解析为整数-12。因此,您需要测试整数是否大于0.

另外,作为&#34; D Standley&#34;如果你想继续要求用户输入一个正整数,你可能需要一个循环。下面的代码是

static void Main(string[] args)
    {
        int value = 0;
        while(value < 1)
        {
            Console.WriteLine("Enter a positive integer:");
            string line = Console.ReadLine(); // Read string from console

            if (int.TryParse(line, out value) && value <= 0)
            {
                Console.WriteLine("Input is not a positive integer. Try again");
            }
        }
        Console.WriteLine("Value=" + value);
        Console.ReadKey();
    }

答案 2 :(得分:1)

你应该有几个变量,这样你就可以跟踪你需要做多少循环:

int evenNumbersEntered = 0;
int oddNumbersEntered = 0;

然后你应该创建一个while循环,它将继续从用户那里获得输入,直到两个计数器中的一个达到4

// Our requirement is to loop 4 times if an even integer
// is entered and 4 times if an odd integer is entered.
while (evenNumbersEntered < 4 && oddNumbersEntered < 4)
{
    // Get user input here
}

获取用户输入时,您只需执行int.TryParse一次。如果成功,它将返回true,否则false。如果成功,则从字符串解析的整数将存储在变量value中。

int value;
Console.Write("Please enter a positive integer: ");
string line = Console.ReadLine();
bool validInteger = int.TryParse(line, out value);

现在我们收到了用户的一些意见,我们需要弄清楚他们输入的内容并显示一条消息或增加一个计数器。

我们知道如果TryParse失败,则用户没有输入整数,我们应该显示错误消息。

if (!validInteger)
{
    // TryParse failed, which means the user entered a non-integer string
    Console.WriteLine("ERROR: {0} is not a valid integer.", line);
}

否则,如果TryParse成功,则应检查value是否小于零(或零),并显示相应的错误消息。

else if (value < 0)
{
    Console.WriteLine("ERROR: {0} is a negative integer.", line);
}
else if (value == 0)
{
    Console.WriteLine("ERROR: {0} is zero.", line);
}

最后,如果TryParse成功且值不是&lt; = 0,那么你应该检查该值是偶数还是奇数,并为循环增加适当的计数器变量。

else if (value % 2 == 0)
{
    Console.WriteLine("Thank you! {0} is an even integer.", line);
    evenNumbersEntered++;
}
else
{
    Console.WriteLine("Thank you! {0} is an odd integer.", line);
    oddNumbersEntered ++;
}

当这两个计数器中的一个达到4时,while循环将退出。此时,您可能希望向用户显示一些信息,并暂停程序以便他们可以阅读它。

// After the while loop
Console.WriteLine("You entered {0} even numbers and {1} odd numbers",
    evenNumbersEntered, oddNumbersEntered);

Console.Write("Press any key to exit...");
Console.ReadKey();

答案 3 :(得分:1)

这是一个类似的答案,在如何分析问题以及每个步骤的作用方面将其分解。

  

“我想要做的是弹出一个框,要求用户提供   整数,有效。“

您已经对此部分感到满意​​:

Console.Write("Please enter an integer: ");
var input = Console.ReadLine();

-

  

“之后,如果整数为负,则应说”输入正数   数字“。然后,如果它是0,它应该说”输入一个非零数字“。”

对于这部分,我们需要做一些事情:

  1. 检查用户是否确实输入了整数
  2. 检查输入是否为负
  3. 检查输入是否为零
  4. 为此,我们将使用int.TryParse()。此方法需要string进行解析,并且out整数参数将包含从字符串解析的整数(out参数是方法保证将设置为某个值的参数当它返回时)。

    int.TryParse()如果能够将字符串成功转换为整数,则返回true,否则返回false。实际上,我们从这个方法中得到了两件事:

    1. truefalse返回值(回答问题:“字符串是整数吗?”)
    2. out参数,它将包含整数(如果解析成功)
    3. 我们创建了两个变量来捕获int.TryParse的输出:

      1. 获取返回值的boolean
      2. 捕获从字符串
      3. 解析的int的integer

        代码如下:

        int value;
        bool success = int.TryParse(input, out value);
        

        所以为了回答第一个问题,“用户输入了一个整数”,我们检查success的值,其中包含来自int.TryParse的返回值:

        if (success == false)
        {
            Console.WriteLine("The value entered is not a valid integer");
        }
        

        要回答第二个问题,“是整数否定”,我们检查'value'的值

        else if (value < 0)
        {
            Console.WriteLine("The value entered is negative");
        }
        

        要回答第三个问题,“是整数零”,我们再次检查'value'的值

        else if (value == 0)
        {
            Console.WriteLine("The value entered is zero");
        }
        

        -

          

        “最后,如果它是偶数,它应该循环四次   如果它是一个奇数,应该循环四次。“

        现在它越来越棘手了。当用户输入有效整数时,我们需要确定它是奇数还是偶数。在任何一种情况下,听起来我们只会让他们进入一种类型中的4种。这将需要一个循环结构,我们一遍又一遍地执行我们的代码,直到用户输入4个偶数或4个奇数。

        循环结构总是有一个条件,它检查每次迭代以确定它是否应该继续循环或退出。由于我们的条件是:“用户输入了4个偶数或4个奇数”,我们需要创建几个变量来跟踪这些值。变量将在循环的每次迭代中进行检查,并将使用循环内的新值进行更新(当用户输入偶数或奇数时)。

        创建变量很简单,只需要几个int来跟踪输入了多少个奇数和偶数:

        int oddNumbersEntered = 0;
        int evenNumbersEntered = 0;
        

        将它们作为条件添加到循环中也不是太难。由于我们想要在两者中的一个达到4时停止循环,我们将写一些内容,“当oddNumbersEntered小于4且evenNumbersEntered小于4时,继续从用户那里得到输入”:

        // As soon as one of these variables equals '4', the loop will quit
        while (oddNumbersEntered < 4 && evenNumbersEntered < 4)
        {
            // Get user input (this is the code above)
        }
        

        但我们还需要在用户输入偶数或奇数时用新值更新这些变量,否则循环将永远继续。

        我们如何知道数字是偶数还是奇数?最简单的方法是将它除以2并查看是否有任何余数。如果余数为0,那么它是偶数,否则它是奇数。

        为了检查除法运算的剩余部分,我们使用模运算符(%),它就像一个除法它只返回余数。例如,10 % 3 = 1因为3进入10次,其余为1次。

        while (oddNumbersEntered < 4 && evenNumbersEntered < 4)
        {
            // Get user input (this is the code above)
        
            if (value % 2 == 0)
            {
                evenNumbersEntered++; // This increments our even number counter by one
            }
            else 
            {
                oddNumbersEntered++; // This increments our odd number counter by one
            }
        }
        

        所以这应该让我们得到一个工作程序,但由于Console应用程序将在处理完成时退出,并且我们希望用户看到一些结果,我们将在末尾添加一些代码来显示结果对用户说,然后提示他们在完成阅读后按键。

        让我们看看他们输入了多少奇数和偶数:

        Console.WriteLine("All done! You entered {0} even and {1} odd numbers", 
            evenNumbersEntered, oddNumbersEntered);
        

        现在我们等待他们在退出前按一下键:

        Console.Write("Press any key to exit...");
        Console.ReadKey();
        

        这部分是在while循环结束时进行的。

        全部放在一起

        当我们将所有代码放在一起时,我们看起来像:

        int oddNumbersEntered = 0;
        int evenNumbersEntered = 0;
        
        // As soon as one of these variables equals '4', the loop will quit
        while (oddNumbersEntered < 4 && evenNumbersEntered < 4)
        {
            Console.Write("Please enter an integer: ");
            var input = Console.ReadLine();
        
            int value;
            bool success = int.TryParse(input, out value);
        
            if (success == false)
            {
                Console.WriteLine("The value entered is not a valid integer");
            }
            else if (value < 0)
            {
                Console.WriteLine("The value entered is negative");
            }
            else if (value == 0)
            {
                Console.WriteLine("The value entered is zero");
            }
            else if (value % 2 == 0)
            {
                evenNumbersEntered++; // This increments our even number counter by one
            }
            else
            {
                oddNumbersEntered++; // This increments our odd number counter by one
            }
        }
        
        Console.WriteLine("All done! You entered {0} even and {1} odd numbers",
            evenNumbersEntered, oddNumbersEntered);
        
        Console.Write("Press any key to exit...");
        Console.ReadKey();