Back to previous menu

1

I'm trying to add a "Back" from one menu to the other, first I tried to use do only on the 2nd. menu to go back 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);


            }
        }
    }
    
asked by anonymous 15.11.2018 / 23:54

2 answers

2

In option 3 you want to return to the calling function of the main menu so you can not just exit switch as you are doing, you have to exit the integer 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;
                }
            }
        }
    }
}

See running on .NET Fiddle . And in Coding Ground . Also I put it in GitHub for future reference .

Note that I have improved some more things. Your code can be much simpler, modern and even correct. If the error was typed correctly in the first menu, why did it go wrong in the second? Why did you go wrong in data entry? The data entry needs to be validated the same way, it does not make sense to start right and then do wrong.

From what I understand, you're not understanding what the code does, and this can be a problem. Whenever I see this I suggest you start with simpler things, you are probably doing something you have not yet learned and this is not usually good for learning. Your code is even better than what you see in beginners, but it might be better. One example is trying to use different variable names that do the same thing in different functions. Method names do not follow the C # naming pattern . You do not have to declare the variable for uses only in the front. It only complicates the readability of the code, or even create a variable where it does not need to. pay close attention to what I changed in the code, the rest is up to you to improve.

    
16.11.2018 / 00:16
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(); }
    }
}
    
16.11.2018 / 13:57