Return to previous menu

Asked

Viewed 1,085 times

1

I’m trying to add a "Back" from one menu to the other, first tried using the do only in the 2nd. menu to return to the first, but it only closes.

Follow the whole code:

namespace ConsoleApp10
    {
        class Program
        {
            static void Main(string[] args)
            {
                int menu;

                Console.WriteLine("1 - Conversões");
                Console.WriteLine("2 - Medias");
                Console.WriteLine("0 - Sair");
                Console.WriteLine("Escolha o que deseja fazer: ");

                while (!(int.TryParse(Console.ReadLine(), out menu)))
                {
                    Console.Write("Opção não numerica, digite novamente: ");
                }
                switch (menu)
                {
                    case 2: media(); break;
                    case 1: conversoes(); break;
                    case 0: Console.WriteLine("Finalizando..."); break;
                    default: Console.WriteLine("Nós não temos esta opção, escolhe novamente:"); break;
                }
                Console.ReadKey();

            }
            static void media()
            {
            Console.Clear();

            int menu1;
            do // O PROBLEMA ESTÁ AQUI
            {
                Console.WriteLine("1 - Média Aritmetica");
                Console.WriteLine("2 - Média Ponderada");
                Console.WriteLine("3 - Voltar");
                Console.WriteLine("Escolha o que deseja fazer: ");
                    menu1 = int.Parse (Console.ReadLine());

                    switch (menu1)
                    {
                        case 1: mediaari(); break;
                        case 2: mediapon(); break;
                        case 3: break;
                        default: Console.WriteLine("Nós não temos esta opção, escolhe novamente:"); break;
                    }
            }
            while (false);
            }
            static void mediaari()
            {
            Console.Clear();
            int n1, n2, n3, n4;
                int soma, div;

                Console.WriteLine("Digite a nota 1: ");
                n1 = int.Parse(Console.ReadLine());

                Console.WriteLine("Digite a nota 2: ");
                n2 = int.Parse(Console.ReadLine());

                Console.WriteLine("Digite a nota 3: ");
                n3 = int.Parse(Console.ReadLine());

                Console.WriteLine("Digite a nota 4: ");
                n4 = int.Parse(Console.ReadLine());

                soma = n1 + n2 + n3 + n4;
                div = soma / 4;
                Console.WriteLine("A média é: " + div);
                Console.ReadKey();
            }
            static void mediapon()
            {
            Console.Clear();
            int n1, n2, n3;
                int p1, p2, p3;
                int soma;

                Console.WriteLine("Digite a nota 1: ");
                n1 = int.Parse(Console.ReadLine());

                Console.WriteLine("Digite o peso 1: ");
                p1 = int.Parse(Console.ReadLine());

                Console.WriteLine("Digite a nota 2: ");
                n2 = int.Parse(Console.ReadLine());

                Console.WriteLine("Digite o peso 2: ");
                p2 = int.Parse(Console.ReadLine());

                Console.WriteLine("Digite a nota 3: ");
                n3 = int.Parse(Console.ReadLine());

                Console.WriteLine("Digite o peso 3: ");
                p3 = int.Parse(Console.ReadLine());

                soma = (n1 * p1 + n2 * p2) / (p1 + p2);

                Console.WriteLine("A média é: " + soma);
            }
            static void conversoes()
            {
            Console.Clear();
            int menu2;

                Console.WriteLine("1 - Temperatua");
                Console.WriteLine("2 - Moeda");
                Console.WriteLine("3 - Voltar");
                Console.WriteLine("Escolha o que deseja fazer: ");

                while (!(int.TryParse(Console.ReadLine(), out menu2)))
                {
                    Console.Write("Opção não numerica, digite novamente: ");
                }
                switch (menu2)
                {
                    case 1: temp(); break;
                    case 2:; break;
                    case 0: Console.WriteLine("Finalizando..."); break;
                    default: Console.WriteLine("Nós não temos esta opção, escolhe novamente:"); break;
                }

            }
            static void temp()
            {
            Console.Clear();
            int menu2;

                Console.WriteLine("1 - °F -> °C");
                Console.WriteLine("2 - °C -> °F");
                Console.WriteLine("3 - Voltar");
                Console.WriteLine("Escolha o que deseja fazer: ");

                while (!(int.TryParse(Console.ReadLine(), out menu2)))
                {
                    Console.Write("Opção não numerica, digite novamente: ");
                }
                switch (menu2)
                {
                    case 1: fc(); break;
                    case 2:; break;
                    case 0: Console.WriteLine("Finalizando..."); break;
                    default:
                        Console.WriteLine("Nós não temos esta opção, escolhe novamente:"); break;

                }
            }
            static void fc()
            {
            Console.Clear();
            int f, c;

                Console.WriteLine("Digite o valor em °F: ");
                f = int.Parse(Console.ReadLine());

                c = (f - 32) * 5 / 9;
                Console.WriteLine("A conversão é igual a: " + c);


            }
        }
    }
  • Did the answer solve your question? Do you think you can accept it? See [tour] if you don’t know how you do it. This would help a lot to indicate that the solution was useful to you. You can also vote on any question or answer you find useful on the entire site

2 answers

2

In option 3 you want it to go back to the function calling the main menu so you can’t just leave the switch as you are doing, you have to leave the entire function with return.

using static System.Console;

namespace ConsoleApp10 {
    public class Program {
        public static void Main(string[] args) {
            while (true) {
                WriteLine("1 - Conversões");
                WriteLine("2 - Medias");
                WriteLine("0 - Sair");
                WriteLine("Escolha o que deseja fazer: ");
                int menu;
                while (!(int.TryParse(ReadLine(), out menu))) Write("Opção não numerica, digite novamente: ");
                switch (menu) {
                    case 2: media(); break;
                    case 1: break;
                    case 0: WriteLine("Finalizando..."); return;
                    default: WriteLine("Nós não temos esta opção, escolhe novamente:"); break;
                }
            }
        }
        static void media() {
            while (true) {
                WriteLine("1 - Média Aritmetica");
                WriteLine("2 - Média Ponderada");
                WriteLine("3 - Voltar");
                WriteLine("Escolha o que deseja fazer: ");
                int menu;
                while (!(int.TryParse(ReadLine(), out menu))) Write("Opção não numerica, digite novamente: ");
                switch (menu) {
                    case 1: break;
                    case 2: break;
                    case 3: return;
                    default: WriteLine("Nós não temos esta opção, escolhe novamente:"); break;
                }
            }
        }
    }
}

Behold working in the ideone. And in the .NET Fiddle. Also put on the Github for future reference.

Note that I improved a few more things. Your code can be much simpler, modern and even correct. If you treated the typing error correctly in the first menu, why did you do it wrong in the second? Why did you do it wrong in the data entry? Data entry needs to be validated the same way, it makes no sense to start right and then do wrong.

From what I understand, you’re not understanding what the code does, and that could be a problem. Every time I see this I suggest you start with simpler things, you’re probably doing something you haven’t learned yet and this isn’t usually good for learning.

Your code is actually better than what you see in newbies, but it might be better. An example is trying to use different variable names that do the same thing in different functions. Method names do not follow the C nomenclature standard#. There is no reason to declare the variable to use only up front. It only complicates the readability of the code, or even create variable where you don’t need it. pay close attention to what I changed in the code, the rest is on your own.

  • Thanks for the answer, but unfortunately, your code didn’t work, it just closes instead of going back to the menu, I updated my code and now it’s functional, 100% functional, I’ll post below

  • I’m sorry, it wasn’t clear that I wanted this either, but it’s just copying the logic from one to the other, so I stress that you’re doing something more complex than you’re capable of right now. I’ll change then.

0

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp14
{
    class Program
    {
        static void Main(string[] args)
        {
            int menu; do
            {
                Console.Clear(); Console.WriteLine("=======MENU======="); Console.WriteLine("1 - Médias"); Console.WriteLine("2 - Conversões"); Console.WriteLine("3 - Sair"); Console.WriteLine("=================="); Console.WriteLine("Escolha sua opção: "); while (!(int.TryParse(Console.ReadLine(), out menu)))
                { Console.Write("Opção não numerica, digite novamente: "); }
                switch (menu)
                { case 1: media(); break; case 2: conversoes(); break; case 3: break; default: Console.WriteLine("Opção inválida, tente outra vez"); break; }
            }
            while (menu != 3);
        }
        static void media()
        {
            int menu; do
            {
                Console.Clear(); Console.WriteLine("1 - Media Aritmética"); Console.WriteLine("2 - Média Ponderada"); Console.WriteLine("3 - Voltar"); Console.WriteLine("Escolha sua opção: "); while (!(int.TryParse(Console.ReadLine(), out menu)))
                { Console.Write("Opção não numerica, digite novamente: "); }
                switch (menu)
                { case 1: mediaari(); break; case 2: mediapon(); break; case 3: break; default: Console.WriteLine("Opção inválida, tente outra vez"); break; }
            }
            while (menu != 3);
        }
        static void mediaari()
        { Console.Clear(); double n1, n2, n3, n4; double sd; Console.WriteLine("Digite a nota 1: "); n1 = double.Parse(Console.ReadLine()); Console.WriteLine("Digite a nota 2: "); n2 = double.Parse(Console.ReadLine()); Console.WriteLine("Digite a nota 3: "); n3 = double.Parse(Console.ReadLine()); Console.WriteLine("Digite a nota 4: "); n4 = double.Parse(Console.ReadLine()); sd = (n1 + n2 + n3 + n4) / 4; Console.WriteLine("A média é: " + sd); Console.ReadKey(); }
        static void mediapon()
        { Console.Clear(); double n1, n2, n3; double soma; Console.WriteLine("Digite a nota 1: "); n1 = double.Parse(Console.ReadLine()); Console.WriteLine("Digite a nota 2: "); n2 = double.Parse(Console.ReadLine()); Console.WriteLine("Digite a nota 3: "); n3 = double.Parse(Console.ReadLine()); soma = (n1 * 2 + n2 * 3 + n3 * 5) / (2 + 3 + 5); Console.WriteLine("A média é: " + soma); Console.ReadKey(); }
        static void conversoes()
        {
            Console.Clear(); int menu; do
            {
                Console.WriteLine("1 - Temperatua"); Console.WriteLine("2 - Moeda"); Console.WriteLine("3 - Voltar"); Console.WriteLine("Escolha o que deseja fazer: "); while (!(int.TryParse(Console.ReadLine(), out menu)))
                { Console.Write("Opção não numerica, digite novamente: "); }
                switch (menu)
                { case 1: temp(); break; case 2: moeda(); break; case 3: break; default: Console.WriteLine("Nós não temos esta opção, escolhe novamente:"); break; }
            }
            while (menu != 3);
        }
        static void temp()
        {
            Console.Clear(); int menu; do
            {
                Console.WriteLine("1 - °F -> °C"); Console.WriteLine("2 - °C -> °F"); Console.WriteLine("3 - Voltar"); Console.WriteLine("Escolha o que deseja fazer: "); while (!(int.TryParse(Console.ReadLine(), out menu)))
                { Console.Write("Opção não numerica, digite novamente: "); }
                switch (menu)
                { case 1: fc(); break; case 2: cf(); break; case 3: break; default: Console.WriteLine("Nós não temos esta opção, escolhe novamente:"); break; }
                Console.Clear();
            }
            while (menu != 3);
        }
        static void fc()
        { Console.Clear(); double f, c; Console.WriteLine("Digite o valor em °F: "); f = double.Parse(Console.ReadLine()); c = (f - 32) * 5 / 9; Console.WriteLine("A conversão é igual a: " + c); Console.ReadKey(); }
        static void cf()
        { Console.Clear(); double c, f; Console.WriteLine("Digite o valor em °C: "); c = double.Parse(Console.ReadLine()); f = (c * 9) / 5 + 32; Console.WriteLine("A conversão é igual a: " + f); Console.ReadKey(); }
        static void moeda()
        {
            Console.Clear(); int menu; do
            {
                Console.WriteLine("1 - Real -> Dólar"); Console.WriteLine("2 - Real -> Euro"); Console.WriteLine("3 - Real -> Libra"); Console.WriteLine("4 - Voltar"); Console.WriteLine("Escolha o que deseja fazer: "); while (!(int.TryParse(Console.ReadLine(), out menu)))
                { Console.Write("Opção não numerica, digite novamente: "); }
                switch (menu)
                { case 1: rd(); break; case 2: re(); break; case 3: rl(); break; case 4: break; default: Console.WriteLine("Nós não temos esta opção, escolhe novamente:"); break; }
                Console.Clear();
            }
            while (menu != 4);
        }
        static void rd()
        { Console.Clear(); double r, d, c; Console.WriteLine("Digite a cota do dia atual: "); c = double.Parse(Console.ReadLine()); Console.WriteLine("Digite o valor em Reais: "); r = double.Parse(Console.ReadLine()); d = r * c; Console.WriteLine("A conversão é igual a: " + d); Console.ReadKey(); }
        static void re()
        { Console.Clear(); double r, e, c; Console.WriteLine("Digite a cota do dia atual: "); c = double.Parse(Console.ReadLine()); Console.WriteLine("Digite o valor em Reais: "); r = double.Parse(Console.ReadLine()); e = r * c; Console.WriteLine("A conversão é igual a: " + e); Console.ReadKey(); }
        static void rl()
        { Console.Clear(); double r, l, c; Console.WriteLine("Digite a cota do dia atual: "); c = double.Parse(Console.ReadLine()); Console.WriteLine("Digite o valor em Reais: "); r = double.Parse(Console.ReadLine()); l = c * r; Console.WriteLine("A conversão é igual a: " + l); Console.ReadKey(); }
    }
}
  • this post should be an issue to the question?

  • no, it’s just the code already working kk, to see how I solved

  • Jaum avoid only comment with code, explain also how you arrived at this solution

Browser other questions tagged

You are not signed in. Login or sign up in order to post.