Stack overflow в следующей программе

вы будете видеть, у нас есть проект для класса, в котором мы должны работать с функциями, и есть различные функции для каждой утилиты программы, конвертировать бинарного в десятичный, шестнадцатеричный... и т.д. Случай состоит в том, что функции делают правильно превращение и таково, но прибыв в тот же цикл, который делает их, бросает мне stack overflow ошибку, и я не имею много разработай, почему, вам оставил код, что у меня есть факт до настоящего времени, посмотрим кто-то может давать мне ориентацию:

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

namespace UF2PR2Solucio
{
    class Program
    {
        static void Main(string[] args)
        {
            int opcio = 0;
            bool acabar = false;

            while (!acabar)
            {
                Console.Clear();
                opcio = menuPrincipal();
                switch (opcio)
                {
                    case 1:
                        decimalBinari();
                        break;
                    case 2:
                        binariDecimal();
                        break;
                    case 3:
                        decimalHexadecimal();
                        break;
                    case 4:
                        HexadecimalDecimal();
                        break;
                    case 5:
                        binariHexadecimal();
                        break;
                    case 6:
                        hexadecimalBinari();
                        break;
                    case 7:
                        qualsevol();
                        break;
                    case 8:
                        ajuda();
                        break;
                    case 9:
                        acabar = true;
                        break;
                    default:
                        Console.WriteLine("\nEsperava un numero de l'u al 9");
                        break;
                }
                if (!acabar) espera();
            }
        }
        public static void decimalBinari()
        {
            String numero;

            Console.WriteLine("Entra un numero decimal: ");
            numero = Console.ReadLine();
            //Comprovacio base
            if (esBase(10, numero)) Console.WriteLine(Conversio(10, 2, numero));
            else Console.WriteLine("Esperava un numero decimal");
        }
        public static void binariDecimal()
        {
            String numero;

            Console.WriteLine("Entra un numero binari: ");
            numero = Console.ReadLine();
            //Comprovacio base
            if (esBase(2, numero)) Console.WriteLine(Conversio(2, 10, numero));
            else Console.WriteLine("Esperava un numero binari");
        }
        public static void HexadecimalDecimal()
        {
            String numero;

            Console.WriteLine("Entra un numero hexadecimal: ");
            numero = Console.ReadLine();
            //Comprovacio base
            if (esBase(16, numero)) Console.WriteLine(convertirABaseDeu(16, numero));
            else Console.WriteLine("Esperava un numero hexadecimal");
        }
        public static void decimalHexadecimal()
        {
            String numero;

            Console.WriteLine("Entra un numero decimal: ");
            numero = Console.ReadLine();
            //Comprovacio base
            if (esBase(10, numero)) Console.WriteLine(Conversio(10, 16, numero));
            else Console.WriteLine("Esperava un numero decimal");
        }


        public static void binariHexadecimal()
        {
            String numero;

            Console.WriteLine("Entra un numero decimal: ");
            numero = Console.ReadLine();
            //Comprovacio base
            if (esBase(10, numero)) Console.WriteLine(Conversio(2, 16, numero));
            else Console.WriteLine("Esperava un numero binari");
        }


        public static void hexadecimalBinari()
        {
            String numero;

            Console.WriteLine("Entra un numero decimal: ");
            numero = Console.ReadLine();
            //Comprovacio base
            if (esBase(10, numero)) Console.WriteLine(Conversio(16, 2, numero));
            else Console.WriteLine("Esperava un numero hexadecimal");
        }


        public static void qualsevol()
        {//menu 7
            String numero;
            int baseInicial, baseDesti;

            Console.WriteLine("Entra un numero: ");
            numero = Console.ReadLine();
            Console.WriteLine("Entra la base en que esta aquest nombre: ");
            baseInicial = int.Parse(Console.ReadLine());
            Console.WriteLine("Entra la base a la que el vols convertir: ");
            baseDesti = int.Parse(Console.ReadLine());
            //Comprovacio base
            if (esBase(baseInicial, numero)) Console.WriteLine(Conversio(baseInicial, baseDesti, numero));
            else Console.WriteLine("El nombre introduit no és de la base especificada");
        }
        public static String Conversio(int baseInicial, int baseDesti, String Numero)
        {
            String resultat;
            int resultatB10;
            //Primer convertim de base inicial a base 10
            resultatB10 = convertirABaseDeu(baseInicial, Numero);
            //Despres convertim de base 10 a base desti
            resultat = convertirDeBaseDeu(resultatB10, baseDesti);
            return "hola soc la funcio conversio";
        }
        public static String convertirDeBaseDeu(int numero, int baseDesti)
        {

            String resultat = Conversio(10, baseDesti, numero.ToString());

            //Comprovacio base
            if (esBase(10, numero.ToString())) Console.WriteLine(Conversio(10, baseDesti, numero.ToString()));
            else Console.WriteLine("Esperava un numero en base 10");

            return resultat;
        }
        public static int convertirABaseDeu(int baseNum, String numero)
        {
            int resultat = 0;
            int llargada;
            int digit;
            int potencia = 0;

            llargada = numero.Length;
            for (int x = llargada - 1; x >= 0; x--)
            {
                digit = (int)Char.GetNumericValue(numero[x]);
                if (digit == -1) digit = Convert.ToInt32(numero[x]) - 55;

                resultat = resultat + (digit * Convert.ToInt32(Math.Pow(baseNum, potencia)));
                potencia++;
            }

            Console.WriteLine("el valor a en decimal es : " + resultat);
            return resultat;
        }

        public static Boolean esBase(int laBase, String numero)
        {
            bool resultat = true;

            foreach (char digit in numero)
            {
                if (!digitPertanyBase(digit, laBase))
                {
                    resultat = false;
                    break;
                }
            }
            return resultat;
        }
        public static Boolean digitPertanyBase(char digit, int baseNum)
        {
            bool trobat = false;
            char[] simbols = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
            int x = 0;
            do
            {
                if (digit == simbols[x]) trobat = true;
                x++;
            }
            while ((x < baseNum) && (!trobat));
            return trobat;
        }

        public static int menuPrincipal()
        {
            int opcio = 0;
            ConsoleKeyInfo cki;

            escriureMenu();
            cki = Console.ReadKey(true);
            if (Char.IsNumber(cki.KeyChar))
                opcio = Int32.Parse(cki.KeyChar.ToString());
            else opcio = 0;

            return opcio;
        }
        public static void escriureMenu()
        {
            Console.WriteLine("-----------------------------");
            Console.WriteLine("Conversió de bases numèriques");
            Console.WriteLine("-----------------------------");
            Console.WriteLine("1 - Decimal a binari");
            Console.WriteLine("2 - Binari a decimal");
            Console.WriteLine("3 - Decimal a hexadecimal");
            Console.WriteLine("4 - Hexadecimal a decimal");
            Console.WriteLine("5 - Binari a hexadecimal");
            Console.WriteLine("6 - Hexadecimal a binari");
            Console.WriteLine("7 - D'una base a qualsevol altra");
            Console.WriteLine("8 - Ajuda");
            Console.WriteLine("9 - Sortir");
        }
        public static void ajuda()
        {
            Console.Clear();
            Console.WriteLine("Si saps que són les bases numèriques, no et cal gaire ajuda");
            Console.WriteLine("Si tens alguna queixa, pots escriure-la i,quan premis ENTER serà enviada al nostres programadors");

        }



        public static void espera()
        {
            Console.WriteLine("Prem ANY KEY per tornar al menu");
            Console.ReadLine();
        }
    }


}

Большое спасибо заранее во все! Пока, буду продолжать проверять я код, посмотрим я нахожу что-нибудь в этом роде.

0
задан 24.02.2017, 21:43
0 ответов

Потеря точки останова у исследователя el codigo paso paso son tus mejores amigos en este caso.

En estan funcion lo que ocurre es que llamas el codigo:

convertirABaseDeu(baseInicial, Numero);

эль саль сальта хация:

public static int convertirABaseDeu(int baseNum, String numero)

Аль терминант с указанием функций переднего резюме, высшее резюме:

resultat = convertirDeBaseDeu(resultatB10, baseDesti);

Непрерывная деятельность:

public static String convertirDeBaseDeu(int numero, int baseDesti)
        {

            String resultat = Conversio(10, baseDesti, numero.ToString());

            //Comprovacio base
            if (esBase(10, numero.ToString())) Console.WriteLine(Conversio(10, baseDesti, numero.ToString()));
            else Console.WriteLine("Esperava un numero en base 10");

            return resultat;
        }

Все права:

 String resultat = Conversio(10, baseDesti, numero.ToString());

Creas una nuevallamada hacia la funcion al volverla a la lamar cuando esta aun no ha terminado en la ejecucion previa:

public static String Conversio(int baseInicial, int baseDesti, String Numero)

Всеобщая рецензия за последние годы. Infinitamente en un ciclo del cual no puedes salir. «Пила де ламадас подъём» и «sal pil as» sal [[fun los los:::::::::::::::

3
ответ дан 03.12.2019, 16:51
  • 1
    Большое спасибо, сейчас я разоряю porqué ошибки, но aú n así я не вижу много có mo решать это... Так как некие функции возвращают правильный результат, другие это возвращают два раза... Tendrí схвати какую-то indicació n má s, чтобы давать мне? Я приношу уже весь dí в проверяя có я говорю и меняя вещи и он остается, не выходя... Я раздражен:') с другой стороны как я сказал раньше, muchí пропасти спасибо за твой такой пространный ответ, я понимаю гораздо лучше функционирование, но остаюсь, не видя из-за dó nde помещать руку в это... –  25.02.2017, 18:28
  • 2
    Я предлагаю, чтобы у каждого основания была ее собственная функция превращения, вместо того, чтобы одинокий такой использовал функцию единственного превращения для всего, ты выполняешь необходимое превращение и не должен быть обращая с основания до основания 10 и потом для основания я предназначаю –  27.02.2017, 16:32
  • 3
    Despué s его хожения llegué в ту же conclusió n, имея в виду несколько неудач, что encontré выполнив некие превращения, это haré большое спасибо! –  27.02.2017, 16:35
  • 4
    Я ничего не надеюсь, что он ты помог, Привет –  27.02.2017, 16:37