Ver Mensaje Individual
  #13 (permalink)  
Antiguo 28/07/2014, 21:20
shikamarucb
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Problema con printf en C

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
Tengo una teoria para los numeros raros que ves:

El código que tienes chequea de "derecha a izquierda" (lineas 48 y 55) un arreglo (string) que se llena de izquierda a derecha. El arreglo es un string no inicializado, por lo que tiene basura que tu codigo visitador encuentra antes y produce los numeros raros.

Dicho de otro modo, el inicializar fin y pos es importante, pero no es suficiente para erradicar el problema que te hizo abrir este post.

Te propongo que, para hacerlo explícito, vuelvas a no tener inicializada las variables en cuestion (fin y res) y pongas en el main este cambio:

char numero[20];

cambiarla por

char numero[20] = { 0, 0, 0, 0, 0, 0, '3' };

podrias querer "defender" el programa diciendo, pero ¿y estos valores?

La idea detrás de esto es dejar explicito el contenido ("basura en la memoria") de esta variable no inicializada. Luego numero será leido por un scanf() posterior, ¿verdad?
Pon un numero pequeño (2 digitos, por ejemplo "15")

Mi sospecha es que tu codigo de visita de derecha a izquierda encontrará ese '3' primero y hará operatoria con esos valores.

Prueba poniendo menos 0 a la izquierda de ese '3' y verás aparecer distintos comportamientos dependiendo de esa cantidad.

Si vuelves "numero" a su definicion original (no inicializada), entonces el comportamiento de tu programa dependerá del contenido de la memoria de ese momento.

Solucion?
- Los ciclos para descubrir los digitos los tienes que hacer de "izquierda a derecha", no de "derecha a izquierda".
- "fin" y "pos" deben inicializarse
Hola de nuevo, hombre lo ultimo que escribiste siendote sincero no lo entendi muy bien y te voy a decir que fue lo que te entendi:


con esto char numero[20] = { 0, 0, 0, 0, 0, 0, '3' }; tu pretendes explicarme como seria el funcionamiento de una variable no inicializada; que podria tener diferentes valores como por ejemplo '3' que seria un contenido basura, y al yo introducir digamos el 15 empezara a hacer los calculos desde la posicion del '3', pero al yo recorrer el array de izquierda a derecha entonces no me garantiza que en la posicion siguiente del 5 pueda aparecer un '3' que esto tambien seria algo valido.

Esto fue lo que te entendi man, no se si estoy en lo correcto; si esto es lo correcto entonces la solucion seria inicializar el array con algo que yo no vaya a usar como por ejemplo un @ o algo asi no?