【问题标题】:switch while won't loopswitch while 不会循环
【发布时间】:2020-05-29 10:40:34
【问题描述】:

这是我正在编写的程序的一部分。我的主要问题是,一旦它通过其中一种情况,tit 就不会循环,所以它是无用的。有什么帮助吗? (很抱歉西班牙语中的变量,我创建的几个函数也出现在程序中的 cose 中并且工作得很好,所以我不认为它们与问题有任何关系)。

static void Main(string[] args)
    {
        int minutos_restantes = 480;
        int opcion;
        int valorComercial = 0;
        Tarea[] listado_tareas = new Tarea[10];

        CrearTareas(ref listado_tareas);

        Console.WriteLine("1. Mostrar tareas. \n2. Asignar tarea \n3. Salir, \n Elige opción: ");
        opcion = Convert.ToInt32(Console.ReadLine());

        switch (opcion)
        {
            case 1:
                Imprimirtareas(listado_tareas);
                break;

            case 2:
                Console.WriteLine("Seleccionar número de tarea: ");
                int n = Convert.ToInt32(Console.ReadLine())-1;

                if (n < 0 || n > 10)
                {
                    Console.WriteLine("TAREA INEXISTENTE");
                }

                else if (listado_tareas[n].realizada == true)
                {
                    Console.WriteLine("TAREA YA REALIZADA");
                }

                else if((minutos_restantes - listado_tareas[n].tiempo) <= 0)
                {
                    Console.WriteLine("TIEMPO INSUFICIENTE");
                }

                else
                {
                    listado_tareas[n].realizada = true;
                    minutos_restantes -= listado_tareas[n].tiempo;
                }

                break;
        } while (opcion != 3) ;

    }

【问题讨论】:

标签: c# loops switch-statement


【解决方案1】:

我认为你不能像这样循环切换开关。 尝试分开做while:

do
{
    switch (opcion)
    {
        case 1:
            Imprimirtareas(listado_tareas);
            break;

        case 2:
            Console.WriteLine("Seleccionar número de tarea: ");
            int n = Convert.ToInt32(Console.ReadLine())-1;

            if (n < 0 || n > 10)
            {
                Console.WriteLine("TAREA INEXISTENTE");
            }

            else if (listado_tareas[n].realizada == true)
            {
                Console.WriteLine("TAREA YA REALIZADA");
            }

            else if((minutos_restantes - listado_tareas[n].tiempo) <= 0)
            {
                Console.WriteLine("TIEMPO INSUFICIENTE");
            }

            else
            {
                listado_tareas[n].realizada = true;
                minutos_restantes -= listado_tareas[n].tiempo;
            }

            break;
    } 

}while (opcion != 3) ;

【讨论】:

  • 使用新的模式匹配,那些 else if 可以成为 switch/case 的一部分。
【解决方案2】:

没有这样的结构:

switch
{

} while (...);

在 C# 中。你实际写的是:

switch
{

}
while (...);

另一种写法

switch
{

}

while (...)
{

}

我怀疑你想把你的 switch 语句放在一个 while 或 do...while 循环中。

【讨论】:

    【解决方案3】:

    去做这样的事情:

    int opcion = 0;
    do
    {
        opcion = Convert.ToInt32(Console.ReadLine());
        switch (opcion)
        {
            ...
        }
    } while (opcion != 3);
    

    也检查一下这个:While Loop in C# with Switch Statement

    【讨论】:

      【解决方案4】:

      这是损坏的代码。 您有一个 switch() {} 语句(没有 default 和那些 breaks 会导致您超出其范围)和一个 while (condition) /*do nothing*/; 语句。

      意图是do{switch(){}}while()

      是时候看书了……

      https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/switch

      https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/while

      https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/do

      【讨论】:

        【解决方案5】:

        你应该这样做:-

        while (condition)
        {
             switch
             {
        
             }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-20
          • 2013-02-08
          • 2012-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多