Bueno al fin puedo demostrar con este programa lo quería lograr.-
Código
#include <stdio.h> #include <limits.h> #include <stdlib.h> #include <string.h> void charAint(const char[], int* ,int); void intAbinario(int, int*); int main(){ char numeroChar[11] = ""; unsigned int ok=0, i=0, longitud=0, numero, *ptrNumero = № do{ ok=0; numeroChar[longitud-1] = '\0'; if(numeroChar[0] == '\0' || numeroChar[0] == '0'){ ok=1; } else{ for(i=0;numeroChar[i] != '\0'; i++){ if(numeroChar[i] <=47 || numeroChar[i] >=58){ ok=1; break; } } if(ok==0){ i=0; if(longitud-1 == 10 && numeroChar[0] >= 2){ i=1; } else{ charAint(numeroChar, ptrNumero, longitud); if(*ptrNumero > INT_MAX){ i=1; } } if(i == 1){ ok=1; *ptrNumero = 0; } } } }while(ok == 1); intAbinario(numero, ptrNumero); return 0; } void charAint(const char numeroChar[], int *ptrNumero, int longitud){ unsigned auxiliar=0, i=0; while(i < longitud-1){ auxiliar = numeroChar[i]-48; *ptrNumero=10* *ptrNumero+auxiliar; i++; } } void intAbinario(int numero, int *ptrNumero){ char binario[33] = ""; unsigned int i=0, j=0, k=0, temp=0; do{ binario[i] = '0' + numero%2; numero = numero/2; i++; }while (numero != 0); binario[i] = '\0'; temp = binario[j]; binario[j] = binario[k]; binario[k] = temp; } }
No acepta los siguientes ingresos:
- 0 o vacio
- s25 o 25s
- número mayor a INT_MAX
En cuanto a la función charAint se que existe atoi pero en este caso es para practicar con punteros y funciones.-
Espero sugerencias para optimizarlo, muchas gracias a todos los que participaron para ayudarme a lograrlo.-
Saludos