【问题标题】:How to get a console to read through all conditions如何让控制台读取所有条件
【发布时间】:2019-04-15 18:10:02
【问题描述】:

我有一个控制台应用程序,它要求用户从三个选项中选择一个,并且能够在需要时打开库存。但是,控制台不会检查其他条件是否为真,而是线性读取条件并等待第一个条件满足。例如,在下面的代码中,它运行文本的第一位,显示选项,然后等待用户输入“库存”而不考虑其他选项。这是怎么回事?为什么会这样?以及如何让控制台运行并检查是否所有条件都已满足?

这是代码

using System;
using System.IO;

namespace Feed_de_monky
{
    class Program
{

    static void Main(string[] args)
    {
        Console.ForegroundColor = ConsoleColor.Green;
        string one = "";
        string two = "";
        string inventory = "inventory";
        int storyint = 0;
        TextReader input = Console.In;
        TextWriter output = Console.Out;
        int options = 0;

        if (storyint == 0)
        {
            Console.WriteLine("You are in a dark Jungle.  You look into the darkness of the trees and see the silhouette of a tiger standing in front of you down the way.");
            Console.WriteLine("");
            Console.WriteLine("turn and run");
            Console.WriteLine("pounce on tiger");
            Console.WriteLine("climb a tree.");
            options++;

            if (input.ReadLine() == inventory)
            {
                output.WriteLine(one);
                output.WriteLine(two);
                return;
            }

            else if(input.ReadLine() == "turn and run" && options == 1)
            {
                output.WriteLine("");
                output.WriteLine("The tiger chases you through the darkness.  You never had a chance.");
                Console.Write("Press any key to continue...");
                Console.ReadKey(true);
            }

            else if(input.ReadLine() == "pounce on tiger" && options == 1)
            {
                output.WriteLine("");
                output.WriteLine("The tiger is caught by surprise.  You overwhelm the beast and he dies of shock and surprise on the spot");
                one = "tiger skin";
                output.WriteLine("TIGER SKIN ADDED TO YOUR INVENTORY");
                storyint++;
                options++;
            }

            else if(input.ReadLine() == "climb a tree" && options == 1)
            {
                output.WriteLine("");
                output.WriteLine("You climb the tree.  But while you sit on the branches believing yourself to be safe, the tiger jumps through the air and bites your head clean off.  You never had a chance.");
                Console.Write("Press any key to continue...");
                Console.ReadKey(true);
            }

            Console.Write("Press any key to continue...");
            Console.ReadKey(true);
        }


    }
}

}

【问题讨论】:

  • 是因为 options != 1
  • 是“爬树。”总是问题之前的最后一个输出?
  • 你应该只调用一次ReadLine(),然后测试你所有的if/else值。就目前而言,第一个if 条件执行并读取一行。如果您没有输入“inventory”,那么下一个else if 将执行并读取另一行。现在如果你输入除“turn and run”以外的任何内容,下一个else if 将读取一行。

标签: c# if-statement console conditional-statements multiple-conditions


【解决方案1】:

我想你可能需要设置

var inputLine = input.ReadLine();

然后在变量 inputLine 上执行你的逻辑。

正如您现在所拥有的那样,我相信它调用 ReadLine 的次数会超出您的预期。但是,如果您只是调用 .ReadLine() 一次并将其分配给一个应该比重复调用它更好的变量。

【讨论】:

  • 谢谢。你是对的。我将您的行添加到 if(storyint == 0){} 中,效果很好。
猜你喜欢
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
  • 2022-12-04
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
相关资源
最近更新 更多