如何在 C# 控制台中使用用户输入添加推入堆栈

How to add a push in stack using a user input in C# console

我坚持在用户输入数据时添加推送。程序的功能是这样的,当我输入像字母 A 这样的键时,它会添加到堆栈并显示堆栈有 1 个实体。但是我卡住了,应该是当我输入另一个键时它会添加到堆栈中。这是我的代码。

while (true)
        {
            string letter = null;
            Console.WriteLine("Enter A = Apple, O = Orange, M = Mango, G = Guava");
            letter = Console.ReadLine();
            

            if (letter == "a")
            {
                Stack<string> myStack = new Stack<string>();
                myStack.Push(letter);
                Console.WriteLine("Fruits in the basket x " + myStack.Count);
                
               if(letter == "o") {
                    myStack.Push(letter);
                    Console.WriteLine("Fruits in the basket x " + myStack.Count);
                }

任何建议和帮助将不胜感激!提前谢谢你!

进入 if (letter == "a") 语句后,您永远不会重新分配字母。所以当它到达 if(letter == "o") 时,字母仍然等于“a”。

在第二个 if 语句之上,您需要添加 letter = Console.ReadLine();,如下所示:

letter = Console.ReadLine();
if(letter == "o")

这里有不少错误。让我们列出它们

  1. 嵌套 ifs.
    您的 if(letter == "o") 嵌套在检查 if (letter = "a") 中,这意味着它将始终为 false

  2. Console.ReadLine() returns 在按下 Enter 之后,而不是在按下任意键之后
    Console.ReadLine() 不会 return 每个单独的按键在它们发生后按下,它 return 是整个字符序列(a.k.a 一个字符串)仅在您按下 Enter

  3. a
    的 if 语句中声明您的 Stack 如果我想添加一个橙子作为我的第一个项目怎么办?这将引发异常(如果您修复了嵌套的 if 问题),因为在尝试访问它时不会定义它。每次添加一个苹果时,它也会 re-create 堆栈,这意味着,堆栈将被清除,您的堆栈中永远不能有超过 1 个苹果。

  4. 重复代码
    在你所有的 if 语句中都是完全相同的代码,所以不需要多个语句,只需要一个检查字母是否是我们接受的任何语句

修复方法如下:

// Declare myStack once, so it doesn't get reset every time we add an Apple
Stack<char> myStack = new Stack<char>();

while (true)
{
    Console.WriteLine("A = Apple, O = Orange, M = Mango, G = Guava");
    
    // Use Console.ReadKey not ReadLine to capture each key press separately
    // The 'true' parameter prevents the console from showing what character we pressed
    ConsoleKeyInfo keyPressed = Console.ReadKey(true);
    char characterPressed = keyPressed.KeyChar;
    
    if (characterPressed == 'a' || characterPressed == 'o' || characterPressed == 'm' || characterPressed == 'g')
    {
        myStack.Push(characterPressed);
    }
    else
    {
        Console.WriteLine("You pressed a non-valid character");
    }
    
    Console.WriteLine("Fruits in the basked x " + myStack.Count);
}