Antes de pasar al problema principal, te voy a dar unos cuantos consejos.
0º Usa etiquetas GeSHI!! Hará el código más vistoso y entendible y así recibirás antes la ayuda
1º No uses variables globales. Aunque estés haciendo un ejercicio, el uso de variables globales casi nunca está recomendado. En lugar de eso, podrías simplemente retornar el número:
int pedirInfo() {
int k = 0;
do {
printf("\n\n-Ingrese un numero entero positivo cualquiera: "); scanf("%d", &k);
if(k <= 0)//validacion del dato de entrada
{
printf("\a\n\t\t\tERROR: Ingrese un <numero entero positivo>\n");
}
} while(k <= 0);
return k;
}
2º Una variable de tipo 'int' ocupa 32 bits, es decir, 32 ceros o unos. Entonces, ¿por qué la cadena ocupa 1000 bytes? Mejor que solamente ocupe 33 bytes para así optimizar (el último carácter es nulo).
char cadena[33];
3º Teniendo en cuenta el paso anterior y que la cadena empieza por el cero, el ciclo for de la línea 32 se debería ver así:
for(i = 0; i < 32; i++)
4º Hay un error en la línea 34. A la hora de comparar los elementos de la cadena, comparas lo que es la cadena en sí, no los elementos:
if(cadena[i] == '1')
5º Lo que has pretendido hacer es contar la cantidad de 'números odiosos' que has introducido por el teclado, pero si reinicias esta cantidad en cada ciclo, entonces el contar no vale de nada jaja:
int i, cantidad_de_1 = 0, cantidad_de_odiosos = 0;
Las has declarado dentro del ciclo. Solución, poner esta sentencia antes de comenzar el ciclo
6º Después de cada ciclo, yo limpiaría el el buffer stdin. Para ello, al final del ciclo añade
fflush(stdin);
Además, tienes que reiniciar el número de unos en cada ciclo:
cantidad_de_1 = 0;
Después de haber dicho todo esto (espero de no haberme olvidado nada...) ESTO NO ES LO QUE PEDÍA EL EJERCICIO XDD. Lo que pedía el ejercicio es que comprobaras cuántos números odiosos había entre 1 y el número introducido...
PD. Extra: Hay una manera mucho más óptima de realizar este ejercicio. Te dejaré como pista que el ordenador de por sí guarda los datos en binario, no hace falta convertirlos... Puedes usar los operadores &, >> y todos los demás operadores binarios...
ESPERO HABERTE SIDO DE AYUDA!!