Do-while 循环未运行

时间:2021-08-01 17:57:00

标签: c# do-while

我为代码中的swdish 名称道歉。 我正在尝试制作一个程序,要求用户选择苏打水,然后是瓶子的数量。 用户应该能够做出选择,直到数量达到 24 瓶。

当我运行我的代码时,我可以做出一两个选择,然后程序退出。

这是我今晚需要交的作业,所以我现在压力很大。

我不希望你给出解决方案,但请指出正确的方向。

一切顺利!

我的代码:

  Console.WriteLine("Välj läsk att lägga till i backen:");
            Console.WriteLine("1. Coca Cola");
            Console.WriteLine("2. Fanta");
            Console.WriteLine("3. Sprite");
            Console.WriteLine("4. Red bull");
            Console.WriteLine("5. Ramlösa");
            Console.WriteLine("6. Hallonsoda");


            int menyVal = Convert.ToInt32(Console.ReadLine());
            int antalLäsk = 0;
            do
            {

                if (menyVal == 1)
                {
                    Console.Clear();
                    Console.WriteLine("Du har lagt till Coca Cola i backen!");
                    Console.WriteLine("Hur många vill du lägga till?");
                    antalLäsk = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Du har lagt till" + antalLäsk);
                    Console.ReadKey();
                    return;
                }
                else if (menyVal == 2)
                {
                    Console.Clear();
                    Console.WriteLine("Du har lagt till Fanta i backen!");
                    Console.WriteLine("Hur många vill du lägga till?");
                    antalLäsk = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Du har lagt till" + antalLäsk);
                    Console.ReadKey();
                    return;
                }
                else if (menyVal == 3)
                {
                    Console.Clear();
                    Console.WriteLine("Du har lagt till Sprite i backen!");
                    Console.WriteLine("Hur många vill du lägga till?");
                    antalLäsk = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Du har lagt till" + antalLäsk);
                    Console.ReadKey();
                    return;
                }
                else if (menyVal == 4)
                {
                    Console.Clear();
                    Console.WriteLine("Du har lagt till red bull i backen!");
                    Console.WriteLine("Hur många vill du lägga till?");
                    antalLäsk = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Du har lagt till" + antalLäsk);
                    antalLäsk++;
                    Console.ReadKey();
                    return;
                }
                else if (menyVal == 5)
                {
                    Console.Clear();
                    Console.WriteLine("Du har lagt till ramlösa i backen!");
                    Console.WriteLine("Hur många vill du lägga till?");
                    antalLäsk = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Du har lagt till" + antalLäsk);
                    Console.ReadKey();
                    return;
                }
                else if (menyVal == 6)
                {
                    Console.Clear();
                    Console.WriteLine("Du har lagt till Hallonsoda i backen!");
                    Console.WriteLine("Hur många vill du lägga till?");
                    antalLäsk = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Du har lagt till" + antalLäsk);
                    Console.ReadKey();
                    return;
                }
                else
                {
                    Console.Clear();
                    Console.WriteLine("Felaktigt menyval!");
                    Console.ReadKey();
                    return;
                }
            } while (antalLäsk >= 24);
            {
                Console.Clear();
                Console.WriteLine("Backen är full!");
                Console.WriteLine("Programmet avslutas!");
                Console.ReadKey();
            }

4 个答案:

答案 0 :(得分:0)

while 循环中,您应该像在 if 语句中一样要求用户输入。

menyVal = Convert.ToInt32(Console.ReadLine());

此外,对于每次迭代,您需要将 +1 添加到 antalLäsk,而不是通过分配用户键入的输出来覆盖其值。

最后,第二次运行它不会运行“do”语句,它只会运行while语句。为了修复它,您可以切换到 for 循环(无需执行),然后您可以使用索引计数器代替 antalLäsk

for (int i = 0; i <= 24; i++)
{
    ...
}

答案 1 :(得分:0)

您在每个需要删除的 if 块中添加了 return 语句。 此外,您可能希望单独显示瓶子的数量。 所以存储来自每个的用户输入

Convert.ToInt32(Console.ReadLine());

到一个不同的变量,而不是 antalLäsk 然后添加它的值,比如

 var userInput = Convert.ToInt32(Console.ReadLine());
 Console.WriteLine("Du har lagt till" + antalLäsk);
 antalLäsk += userInput;

最重要的是你的循环在不正确的条件下工作 下面是

(antalLäsk >= 24);

应该

(antalLäsk < 24);

而且看起来你希望菜单每次都改变,所以这个语句应该在 do 块中。

            Console.WriteLine("Välj läsk att lägga till i backen:");
            Console.WriteLine("1. Coca Cola");
            Console.WriteLine("2. Fanta");
            Console.WriteLine("3. Sprite");
            Console.WriteLine("4. Red bull");
            Console.WriteLine("5. Ramlösa");
            Console.WriteLine("6. Hallonsoda");

            int menyVal = Convert.ToInt32(Console.ReadLine());

所以你更新的代码应该是,虽然这可以重构,但对你来说已经足够了:

        do
        {
            Console.WriteLine("Välj läsk att lägga till i backen:");
            Console.WriteLine("1. Coca Cola");
            Console.WriteLine("2. Fanta");
            Console.WriteLine("3. Sprite");
            Console.WriteLine("4. Red bull");
            Console.WriteLine("5. Ramlösa");
            Console.WriteLine("6. Hallonsoda");

            int menyVal = Convert.ToInt32(Console.ReadLine());
            if (menyVal == 1)
            {
                Console.Clear();
                Console.WriteLine("Du har lagt till Coca Cola i backen!");
                Console.WriteLine("Hur många vill du lägga till?");
                var userInput = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Du har lagt till" + antalLäsk);
                antalLäsk += userInput;
                Console.ReadKey();
            }
            else if (menyVal == 2)
            {
                Console.Clear();
                Console.WriteLine("Du har lagt till Fanta i backen!");
                Console.WriteLine("Hur många vill du lägga till?");
                var userInput = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Du har lagt till" + userInput);
                antalLäsk += userInput;
                Console.ReadKey();
            }
            else if (menyVal == 3)
            {
                Console.Clear();
                Console.WriteLine("Du har lagt till Sprite i backen!");
                Console.WriteLine("Hur många vill du lägga till?");
                var userInput = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Du har lagt till" + antalLäsk);
                antalLäsk += userInput;
                Console.ReadKey();
            }
            else if (menyVal == 4)
            {
                Console.Clear();
                Console.WriteLine("Du har lagt till red bull i backen!");
                Console.WriteLine("Hur många vill du lägga till?");
                var userInput = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Du har lagt till" + antalLäsk);
                antalLäsk += userInput;
                Console.ReadKey();
            }
            else if (menyVal == 5)
            {
                Console.Clear();
                Console.WriteLine("Du har lagt till ramlösa i backen!");
                Console.WriteLine("Hur många vill du lägga till?");
                var userInput = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Du har lagt till" + antalLäsk);
                antalLäsk += userInput;
                Console.ReadKey();
            }
            else if (menyVal == 6)
            {
                Console.Clear();
                Console.WriteLine("Du har lagt till Hallonsoda i backen!");
                Console.WriteLine("Hur många vill du lägga till?");
                var userInput = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Du har lagt till" + antalLäsk);
                antalLäsk += userInput;
                Console.ReadKey();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Felaktigt menyval!");
                Console.ReadKey();
            }
        } while (antalLäsk < 24);
        {
            Console.Clear();
            Console.WriteLine("Backen är full!");
            Console.WriteLine("Programmet avslutas!");
            Console.ReadKey();
        }

答案 2 :(得分:0)

我稍微修改了您的代码,使用 int.TryParse 添加了一些控制台输入检查,并删除了每个 Console.WriteLine/if 子句中不必要的 if else 重复。此外,您必须对 antalLäsk 的控制台输入的值求和,就像对 antalLäsk += amount; 所做的那样,而 while 条件应为 while (antalLäsk <= 24)

static void Main(string[] args)
{ 
    int menyVal = 0;
    int antalLäsk = 0;
    int amount = 0;
    do
    {
        Console.Clear();
        Console.WriteLine("Välj läsk att lägga till i backen:");
        Console.WriteLine("1. Coca Cola");
        Console.WriteLine("2. Fanta");
        Console.WriteLine("3. Sprite");
        Console.WriteLine("4. Red bull");
        Console.WriteLine("5. Ramlösa");
        Console.WriteLine("6. Hallonsoda");

        if (int.TryParse(Console.ReadLine(), out menyVal))
        {
            Console.Clear();
            if (menyVal == 1)
            {
                Console.WriteLine("Du har lagt till Coca Cola i backen!");
            }
            else if (menyVal == 2)
            {
                Console.WriteLine("Du har lagt till Fanta i backen!");
            }
            else if (menyVal == 3)
            {
                Console.WriteLine("Du har lagt till Sprite i backen!");
            }
            else if (menyVal == 4)
            {
                Console.WriteLine("Du har lagt till red bull i backen!");
            }
            else if (menyVal == 5)
            {
                Console.WriteLine("Du har lagt till ramlösa i backen!");
            }
            else if (menyVal == 6)
            {
                Console.WriteLine("Du har lagt till Hallonsoda i backen!");
            }
            else
            {
                Console.WriteLine("Wrong input! Try again");
                Console.ReadKey();
                continue;
            }
                    
            Console.WriteLine("Hur många vill du lägga till?");
            while (!int.TryParse(Console.ReadLine(), out amount))
            {
                Console.WriteLine("Wrong input! Try again");
                Console.WriteLine("Hur många vill du lägga till?");
            }

            antalLäsk += amount;
            Console.WriteLine("Du har lagt till " + antalLäsk);
            Console.ReadKey();
        }
        else 
        {
            Console.WriteLine("Felaktigt menyval!");
            Console.ReadKey();
        }
    } while (antalLäsk <= 24);

    Console.Clear();
    Console.WriteLine("Backen är full!");
    Console.WriteLine("Programmet avslutas!");
    Console.ReadKey();

}

答案 3 :(得分:0)

请不要重复自己并保持简单(将整体拆分为较小的程序)。 首先,让我们提取数据

// I've chosen IReadOnlyList in order to be protected from occasional 
// data changing; but you can put List<string> or array (string[])   
static IReadOnlyList<string> drinks = new List<string>() {
  "Coca Cola",
  "Fanta",
  "Sprite",
  "Red bull",
  "Ramlösa",
  "Hallonsoda",
};

然后我们可以输入:

int antalLäsk = 0;

// While we have less than 24 bottles (in total)...
while (antalLäsk <= 24) {
  Console.Clear();
  Console.WriteLine("Välj läsk att lägga till i backen:");

  // Menu 
  for (int i = 0; i < drinks.Count; ++i)
    Console.WriteLine($"{i + 1}. {drinks[i]}"); 

  // User selects drink
  if (!int.TryParse(Console.ReadLine(), out int menyVal) || menuVal < 1 || menuVal > drinks.Count) {
    // if selection is invalid (not a integer or out of range)
    Console.WriteLine("Sorry, incorrect menu position. Please, try again");

    continue; 
  }

  Console.Clear();
  Console.WriteLine($"Du har lagt till {drinks[menuVal - 1]} i backen!");
  Console.WriteLine("Hur många vill du lägga till?");

  // User selects number of bottles, again we have to validate the input
  while (!int.TryParse(Console.ReadLine(), out int bottles) || bottles < 0) {
    Console.WriteLine("Invalid number of bottles, please try again");
  } 

  antalLäsk += bottles; 
      
  Console.WriteLine($"Du har lagt till {antalLäsk}");
  Console.ReadKey();
}