Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pablombf en 2 Enero 2018, 19:00 pm



Título: PROBLEMA!!! algoritmo conversor de struct a int, me devuelve 0
Publicado por: pablombf en 2 Enero 2018, 19:00 pm
No hay errores de compilacion, solo un warning.
Consiste en que de un vector con numeros en char, los pasa a tipo int.
Uso bucle for, que de la posición más avanzada hasta la posicion 0 los va convirtiendo.
Muchas gracias si me podeis ayudar:)

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int valor (const char sec[]){
  5.    int f=0;
  6.    int l=1;
  7.    int g=0;
  8.    for(int i='\0'-1;i=0;i--){
  9.       f=sec[i]-'0';
  10.      int g=f*l+g;
  11.       l=l*10;
  12.    }
  13.    cout<<"El numero en entero es: "<<g<<endl;
  14.    return g;
  15. }
  16.  
  17. int main(){
  18.    valor("456798756464");
  19.    return 0;
  20. }


Título: Re: PROBLEMA!!! algoritmo conversor de struct a int, me devuelve 0
Publicado por: engel lex en 2 Enero 2018, 19:10 pm
no veo bien lo que haces con tu codigo, pero si hay error es la linea 8

Código:
for(int i='\0'-1;i=0;i--)
                  ^

estás igualando en el comparador, i=0 retornará el valor igualado (0) por lo tanto el ciclo nunca entrará en el for


a demás estás redeclarando g dentro del for (linea 10), eso solo te llevará a no poder compilar bajo el error de "variable previamente definida" (A menos que uses dev c++ o algo así raro que te deja pasar esos errores XD)


Título: Re: PROBLEMA!!! algoritmo conversor de struct a int, me devuelve 0
Publicado por: MAFUS en 2 Enero 2018, 20:11 pm
Cómo bien dice engel lex tienes un problema en la construcción del for:
Tú quieres que busque el final de la cadena, pero no debes dar el literal '\0', el programa no sabe que tú pretendes que busque eso. En verdad necesitas la función strlen, esa sí que da el tamaño de una cadena y es lo que pretendes.
La siguiente instrucción del for es la condición de continuación y allí casi nunca debes usar una asignación, que es lo que haces con un solo símbolo de igual. En su lugar la condición debe ser 'mientras i sea Mayor o igual a 0', es decir i >= 0.
Por último, como te ha dicho engel lex, dentro del for ocultas la g del main con otra variable con el mismo nombre (g) así que cada vez que el programa pase por ahí en realidad creará esa variable nueva, le asignará un valor y la destruirá antes de empezar el siguiente bucle. Para evitar eso quita el tipo a la asignación, es decir: en vez de int g=f... Quita int y que quede g=f...

Por último recuerda que no podrás crear nunca un número más grande que lo que quepa dentro de un int. Si le pasas una valor muy grande a tu función te encontrarás con un valor extraño a la vuelta de la función.


Título: Re: PROBLEMA!!! algoritmo conversor de struct a int, me devuelve 0
Publicado por: pablombf en 2 Enero 2018, 21:40 pm
Me habeis ayudado una barbaridad, muchas gracias por vuestro tiempo a los dos :D