PROBLEMA!!! algoritmo conversor de struct a int, me devuelve 0

Iniciado por pablombf, 2 Enero 2018, 19:00 PM

0 Miembros y 1 Visitante están viendo este tema.

pablombf

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 (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int valor (const char sec[]){
    int f=0;
    int l=1;
    int g=0;
    for(int i='\0'-1;i=0;i--){
       f=sec[i]-'0';
      int g=f*l+g;
       l=l*10;
    }
    cout<<"El numero en entero es: "<<g<<endl;
    return g;
}

int main(){
    valor("456798756464");
    return 0;
}

engel lex

#1
no veo bien lo que haces con tu codigo, pero si hay error es la linea 8

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)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MAFUS

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.

pablombf

Me habeis ayudado una barbaridad, muchas gracias por vuestro tiempo a los dos :D