Título: Descomponer un numero entero en lenguaje C. Publicado por: NOB2014 en 31 Marzo 2014, 16:00 pm Hola a todos y que tengan un muy buen dia.
Lenguaje………………....: “C” Sistema operativo……: Windows XP Compilador……………...: MinGW Problema………………...: No puedo concluir el programa porque no logro mover asía la izquierda los dígitos restantes e insertar el ‘\0’.- Error………………………...: Ninguno. Otras Observaciones: Para todo aquellos que tengan mucho tiempo, me podrían indicar que debo cambiar para obtimizarlo . Código……………………..: Código
Saludos y muchas pero muchas gracias por el tiempo dedicado a este tema.- Daniel Título: Re: Descomponer un numero entero en lenguaje C. Publicado por: eferion en 31 Marzo 2014, 16:18 pm Tienes que desplazar los caracteres desde "descartar"+1 a strlen(digitos) una posición hacia la izquierda y con eso has eliminado el carácter deseado.
La forma de hacerlo... un while, un for... como más te guste. Título: Re: Descomponer un numero entero en lenguaje C. Publicado por: NOB2014 en 1 Abril 2014, 19:23 pm Hola a todos y que tengan un muy buen día.-
Muchas gracias eferion por la orientación, ahora el caso es que funciona pero me queda una duda que me ha hecho practicar todo un día y tuve que hacer algo muy rebuscado porque de lo contrario me desaparecía el contenido de la variable digitos, si lo desean pueden correrlo sin la variable _digitos y con ella para ver lo que pasa, por favor si alguien encuentra el porqué le agradecería me lo diga para no dar esto por terminado y desconocer el error.- Código
Saludos. Daniel Título: Re: Descomponer un numero entero en lenguaje C. Publicado por: leosansan en 1 Abril 2014, 19:40 pm Efectivamente, tal como lo tenias se "perdía" exactamente el digito[0]. Eso es algo que comprobé tanto en el Code::Blocks como en el DeV-C++ y sospecho que es un bug del compilador ya que también lo probé en el programa PellesC que usa otro compilador y en éste último el programa no perdía al mencionado dígito, funcionaba correctamente.
Otra forma de que te funcione sin añadir _digitos es intercambiando los char, así: Código
Lo probé de mil y una manera pero tal como lo tenias no había forma, se pierde el primer dígito, así que tranquilo, no te pasa a ti sólo. A ver si algún maestro se digna mirarlo. Por si acaso eso ocurre le facilito el código donde se imprime digito[0]antes, que está O.K, y después, donde "desaparece": Código
¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) EDITO: Sin intercambiar los char, sólo con declarar cualDescartar con dimensión mayor de 2 funciona :o Código
Es como si al hacer uso de la función "verifica" un elemento de la variable "cualDescartar" sobreescribiera a digitos[0] . Título: Re: Descomponer un numero entero en lenguaje C. Publicado por: ivancea96 en 1 Abril 2014, 19:55 pm ¿Qué decíis que "desaparece"?
Estuve probando con varios números, y no veo ninguna pérdida. Título: Re: Descomponer un numero entero en lenguaje C. Publicado por: NOB2014 en 1 Abril 2014, 19:58 pm Hola leo.-
Dios mío vaya alegrón al ser vos uno de los que me ayuda, en cuanto al caso en si no puedo creer que esto pase, no parece tener ninguna lógica.- Saludos. Daniel Título: Re: Descomponer un numero entero en lenguaje C. Publicado por: leosansan en 1 Abril 2014, 20:02 pm ¿Qué decíis que "desaparece"? Estuve probando con varios números, y no veo ninguna pérdida. Usa mi código, que es casi como el original y debería de salirte: Código
Y si te funciona bien es que usas otro compilador diferente del min o NOB2014 y yo estamos embrujados. :laugh: :laugh: :laugh: ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) EDITO: Creo saber ya la causa. Al declarar cualDescartar[2] con dimensión 2 y usar fgets para captarlo, un primer caracter es el digito, un segundo caracter es el nulo de fin de cadena y "un tercer" caracter es el '\n' que introduce fgets, con lo que se sobreescribe más allça de la dimensión 2 que estaba establecida y da la casualidad de que sobreescribe el primer caracter de la variable digito, por eso el problema se solventa con cualDescartar[3]. Ahora me quedo más tranquilo. Ahora me quedo más tranquilo, Título: Re: Descomponer un numero entero en lenguaje C. Publicado por: NOB2014 en 1 Abril 2014, 20:09 pm Hola Ivancea99.-
Bueno no tengo nada para agregar es tal cual como dice leo, me pasa exactamente lo mismo. Citar EDITO: Sin intercambiar los char, sólo con declarar cualDescartar con dimensión mayor de 2 funciona Me gustó, funciona correctamente de esta manera, espero que a alguien más le pase lo mismo para que entre todos encontremos la explicación.-Saludos. Daniel Título: Re: Descomponer un numero entero en lenguaje C. Publicado por: eferion en 1 Abril 2014, 20:14 pm Código
por pasos: * "cualDescartar" tiene longitud 2 ( posiciones 0 y 1 ) * "longitud" se incializa a valor 2 ( mal vamos ) * ingreso[ longitud ] = '\0' ( toma castaña, escribimos fuera del array ). El caso es que el compilador está poniendo en la pila primero a "cualDescartar" y despues "digitos", al salirte de "cualDescartar" escribes en "digitos" Vaya, leosansan hemos puesto la respuesta a la vez XDDDD Título: Re: Descomponer un numero entero en lenguaje C. Publicado por: NOB2014 en 1 Abril 2014, 20:49 pm Hola a todos.
Citar fgets - Leerá hasta n-1 caracteres o hasta que lea un retorno de línea (\n). En este último caso , el carácter de retorno de línea también es leído.- Código
Código Para dejarlo en mi caso del todo claro, ¿esta es la manera correcta de declarar el array y fgets(longitud) para capturar un máximo de 10 dígitos? Saludos. Daniel Título: Re: Descomponer un numero entero en lenguaje C. Publicado por: eferion en 1 Abril 2014, 20:59 pm "digitos" puede tener tamaño 11 perfectamente, con eso podrá almacenar una cadena de 10 caracteres.
Si quieres que el buffer sea capaz de almacenar una cadena de longitud X has de declararlo, al menos, de tamaño X+1, ya que debes reservar un espacio para el carácter nulo. Esto solo es aplicable a cadenas de caracteres. |