Buenas, tengo un ejercicio en el que me piden hacer un programa que pase de números positivos decimales a binario (incluyendo el 0), y yo he hecho esto:
//Incluimos las librerías propias y del sistema
#include <stdio.h>
#include "decBin.h"
//Declaramos las funciones
int leeNumero();
void decBin(int n);
int main()
{
int n;
n = leeNumero();
if (n > 0)
{
decBin(n);
}
printf("\n");
return 0;
}
int leeNumero()
{
int numero;
do
{
printf(T_INTRODUZCA_NUMERO);
scanf("\n%d", &numero);
}
while (numero < 0); /*Con este bucle hacemos que si el numero introducido
es negativo, no lo procese y vuelva a pedirlo */
return numero;
}
//La funcion decBin realiza la conversión decimal-binario
void decBin(int n)
{
if (n == 0)
printf("0");
else if (n == 1)
printf("1");
else
{
decBin(n / 2);
printf("%d", n % 2);
}
}
Aquí os pongo el fichero decBin.h:
#ifndef DECBIN_H
#define DECBIN_H
#define T_INTRODUZCA_NUMERO "Introduzca un numero no negativo: "
#define T_INTRODUZCA_NUMERO2 "Introduzca un numero: "
#endif
Me compila bien, sin avisos ni nada, y funciona bien salvo cuando le digo que me convierta el 0 en binario (qué evidentemente sigue siendo 0), lo que hace es salir del programa, ¿alguna solución?
Gracias de antemano y un saludo!
Cita de: jamatbar en 27 Noviembre 2013, 17:55 PMMe compila bien, sin avisos ni nada, y funciona bien salvo cuando le digo que me convierta el 0 en binario (qué evidentemente sigue siendo 0), lo que hace es salir del programa, ¿alguna solución?
Eso sucede porque en la función main llamas a la función "decBin" solo si el numero introducido es
mayor que cero:
n = leeNumero();
if (n > 0){
decBin(n);
}
printf("\n");
Eso es innecesario ya que en la función "leeNumero" verificas que el numero introducido no sea negativo, sustituye el fragmento anterior por:
n = leeNumero();
decBin(n);
printf("\n");
Una vez verifiques el correcto funcionamiento del programa con ese cambio el siguiente (cambio) es eliminar la variable "n".
Un saludo
metelo en un bucle si quieres es seguir pedindo numeros :D
Segun comenta rir3760 veo una posible solucion...
Seria:
if (n >= 0){
decBin(n);
}
¿que os parece? :rolleyes:
Hecho, muchas gracias!