堆栈总和元素(初级 C#)

stack sum elements (Beginer C#)

我目前正在学习C#语言。我有以下任务:

编写程序:

读取整数输入并将它们添加到堆栈

输入

输入

1 2 3 4

增加 5 6

删除 3

eNd

输出

总数:6

输入:

3 5 8 4 1 9

加 19 32

删除 10

加 89 22

删除 4

删除 3

结束

输出:

总数:16

这段代码是我写的。从一开始它就起作用了,我输入了一些数字并将它们毫无问题地放入堆栈中。从现在开始,输入我想做的“添加”,“删除”或“结束”后,添加数字后出现错误。在我决定添加一个元素后,程序允许我无限期地输入数字,直到我尝试使用其他两个选项之一更改数字的添加,我收到此错误:System.FormatException: 'Input string was not in a correct format.'

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace Stack_Sum
{
    class Program
    {
        static void Main(string[] args)
        {
            
            Stack<int> numbers = new Stack<int>();
            string input = Console.ReadLine();
            string[] number = Regex.Split(input, @"\D+");
            foreach (string value in number)
            {
                if (!string.IsNullOrEmpty(value))
                {
                    int i = int.Parse(value);
                    numbers.Push(i);
                }
            }

            string option = Console.ReadLine();

            while (true)
            {
                switch (option.ToLower())
                {
                case "add":
                        int addToStack = Int32.Parse(Console.ReadLine());
                        for (int i = 0; i < 2; i++)
                        {
                            numbers.Push(addToStack);
                        }
                        continue;
                case "remove":
                        int popItem = Convert.ToInt32(Console.ReadLine());
                        for (int i = 0; i < popItem; i++)
                        {
                            numbers.Pop();
                        }
                            continue;
                case "end":
                        foreach (var Stack_Sum in numbers)
                        {
                            int sum = 0;
                            sum += Stack_Sum;
                        }
                        break;
                }              
            }
        }
    }
}

while(true) 循环之前,您只要求选项选择 一次

string option = Console.ReadLine();

之后,您将所有用户输入视为整数,因此用户(您)没有机会更改选项。一个简单的解决方法是将该行 放在循环 中,最好使用更多说明:

//... Your code... 

while(true)
{
   Console.Write("Add, Remove, End: “);
   string option = Console.ReadLine();
  
   switch(option.ToLower())
   {
      //... Your code... 
   } 
}

现在,我不确定您程序的其余部分是否正常工作,但那是另一回事了。一旦你克服了这个障碍,你就可以用断点来调试它了。