compila y ejecuta bien, pero me muestra un caracter raro

Iniciado por pedroarcego, 6 Septiembre 2010, 01:53 AM

0 Miembros y 2 Visitantes están viendo este tema.

pedroarcego

Hola. tengo el codigo hecho para pasar una cadena binaria a una de base 32. El funcionamiento está bien. sin embargo, al entregarle el dato de entrada, me da el ultimo dato de salida con un caracter "feo", que  corresponde a la "ultima posicion" de un arreglo que sale de una función. Que puede estar mal? o cuando pasa esto???? gracias por cualquier ayuda!!!

dato de entrada:
10001110001010101010


dato de salida debería ser:
hola

PERO el dato de salida que me da es este:
hola

EL CODIGO LO INSERTO ACA ABAJO:
------------------------------------------------------------------------------------------------------
#include<stdio.h>
#include<string.h>


////////////////////////////////////////////////////
//funcion para elevar potencias/////////////////////
int potencia(int base, int exponente){
int i,resultado;
resultado=1;
if (exponente > 0)
for (i=0;i<exponente;i++){
resultado=base*resultado;
};

return resultado;
}

///////////////////////////////////////////////////////////////////
////////funcion para cambiar base binario a decimal////////////////
void binario_atreintaidos(char *binario,char *treintaidos){
int porte,i,j,cont,parcial,letras;


porte=strlen(binario);
i=porte-1;  //i almacena la cantidad de datos del binario
letras=porte/5;
for(j=0 ; porte>0 ; j++){
 
    cont=0;
    parcial=0;
    while(cont<5){
               
        if (binario[i]=='1')   // correspondiente potencia de 2 en caso de haber un 1
            parcial= potencia(2,cont) + parcial;
                           
        cont++;
i--;  
};     //endwhile
    porte=i;
cont=letras-j;
cont--;

   
switch (parcial){
case 0: treintaidos[cont]='0';break;
case 1: treintaidos[cont]='1'; break;
case 2: treintaidos[cont]='2'; break;
case 3: treintaidos[cont]='3'; break;
case 4: treintaidos[cont]='4'; break;
case 5: treintaidos[cont]='5'; break;
case 6: treintaidos[cont]='6'; break;
case 7: treintaidos[cont]='7'; break;
case 8: treintaidos[cont]='8'; break;
case 9: treintaidos[cont]='9'; break;
case 10: treintaidos[cont]='a'; break;
case 11: treintaidos[cont]='b'; break;
case 12: treintaidos[cont]='c'; break;
case 13: treintaidos[cont]='d'; break;
case 14: treintaidos[cont]='e'; break;
case 15: treintaidos[cont]='f'; break;
case 16: treintaidos[cont]='g'; break;
case 17: treintaidos[cont]='h'; break;
case 18: treintaidos[cont]='i'; break;
case 19: treintaidos[cont]='j'; break;
case 20: treintaidos[cont]='k'; break;
case 21: treintaidos[cont]='l'; break;
case 22: treintaidos[cont]='m'; break;
case 23: treintaidos[cont]='n'; break;
case 24: treintaidos[cont]='o'; break;
case 25: treintaidos[cont]='p'; break;
case 26: treintaidos[cont]='q'; break;
case 27: treintaidos[cont]='r'; break;
case 28: treintaidos[cont]='s'; break;
case 29: treintaidos[cont]='t'; break;
case 30: treintaidos[cont]='u'; break;
case 31: treintaidos[cont]='v'; break;
case 32: treintaidos[cont]='w'; break;
};//endswitch


};  //endfor      

};   //endfuncion
///////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////




int main(){
char cadena[50],treintaidos[50];

printf("ingrese numero binario \n");
scanf("%s",cadena);
printf("la conversion a base 10 es esta:\n");
binario_atreintaidos(cadena,treintaidos);
printf("%s \n",treintaidos);



return 0;
}

Littlehorse

Asegúrate que la cadena treintaidos este terminada en null antes de imprimirla.
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

clodan

#2
Cita de: pedroarcego en  6 Septiembre 2010, 01:53 AM
Hola. tengo el codigo hecho para pasar una cadena binaria a una de base 32. El funcionamiento está bien. sin embargo, al entregarle el dato de entrada, me da el ultimo dato de salida con un caracter "feo", que  corresponde a la "ultima posicion" de un arreglo que sale de una función. Que puede estar mal? o cuando pasa esto???? gracias por cualquier ayuda!!!

La verdad qe no tengo ni idea por que es, pero en la libreria math.h hay una funcion qe se llama sqrt(); que te eleva al cuadrado un numero, fijate qe tiene bastantes funciones, es para qe no te estes matando haciendolo asi :P

salu2!

darkraider

Curioso de mi...

clodan

Cita de: darkraider en  6 Septiembre 2010, 15:51 PM
sqrt() es raíz cuadrada (SQuare RooT) compañero...

jajajaja qe tontoo soyy!!! tenes razon!!! jajajaja te acordas cual es la de elevacion?

Lambda


Debci

Cita de: clodan en  6 Septiembre 2010, 16:10 PM
Cita de: darkraider en  6 Septiembre 2010, 15:51 PM
sqrt() es raíz cuadrada (SQuare RooT) compañero...

jajajaja qe tontoo soyy!!! tenes razon!!! jajajaja te acordas cual es la de elevacion?
por lógica es pow()

Saludos

Garfield07

A mi me parece que el signo raro es traducido del \n del salto de linea.... tal vez sea eso...


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo