• Sábado 14 de Diciembre de 2024, 13:46

Autor Tema:  De entero positivo a binario no aceptar letras ni negativos  (Leído 2851 veces)

alexistkd

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
De entero positivo a binario no aceptar letras ni negativos
« en: Domingo 26 de Abril de 2009, 22:53 »
0
Buenas tengo varias dudas hize un programa que convierte de entero positivo a binario me corre perfectamente pero quiero implementar que no acepte letras que tire un error al ingresar letras, ya hize que no acepte numeros negativos aqui esta el codigo hasta ahora necesito implementar que tire un mensaje de error cuando ingrese una letra cualquiera:

Código: C
  1. #include <stdio.h>
  2. #include <conio.h>
  3. main()
  4. {
  5. float a[16];
  6. int ne,x,swi;
  7. clrscr();textcolor(9);textbackground(12);clrscr();
  8. printf("Este progrograma esta diseñado para convertir un numero entero positivo decimal a binario.");
  9. printf("nnPara continuar con el programa presione ENTER");
  10. clrscr();textcolor(9);textbackground(12);clrscr();
  11. intonum:
  12. printf("Introduzca el numero entero positivo que desea convertir a binario:");
  13. scanf("%i",?);
  14. if(ne<0)
  15. {
  16. err:
  17. printf("Ha introducido un numero negativo, si desea intentar nuevamente presione 1 o si desea salir del programa presione 2n");
  18. scanf("%i",&swi);
  19. if(swi==1)
  20. {
  21. printf("n");
  22. goto intonum;
  23. }
  24. else
  25. if(swi==2)
  26. {
  27. goto fin;
  28. }
  29. else
  30. {
  31. printf("Error de entrada");
  32. goto err;
  33. }
  34. }
  35. else
  36. {
  37. for(x=15;x>=0;x=x-1)
  38. {
  39. if(ne>0)
  40. {
  41. a[x]=ne%2;
  42. }
  43. else
  44. {
  45. a[x]=0;
  46. }
  47. ne=ne/2;
  48. }
  49. for(x=0;x<=15;x++)
  50. {
  51. printf("%.0f",a[x]);
  52. }
  53. }
  54. fin:
  55. }
  56.  

Gracias de antemano.

Leo_Gutierrez

  • Visitante
Re: De entero positivo a binario no aceptar letras ni negativos
« Respuesta #1 en: Lunes 27 de Abril de 2009, 06:52 »
0
Puedes evaluar el valor de retorno del Scanf(), mira esto :

Código: C
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     signed int opcion;
  5.     do
  6.     {
  7.         while(getchar() != 'n');              // Para vaciar el buffer.
  8.         printf("nNumero: ");
  9.         }while(scanf("%d", &opcion) != 1);
  10.     printf("nnHas elegido : %d", opcion);
  11.     return 0;
  12. }
  13.  
  14.  
El programa termina hasta que se haya ingresado un numero, en caso contrario, vuelve a pedir el numero.
Salida:


Código: Text
  1. Numero: a
  2.  
  3. Numero: f
  4.  
  5. Numero: d
  6.  
  7. Numero: 2
  8.  
  9.  
  10. Has elegido : 2
  11.  
  12.  

betopin

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
    • http://www.programasenc.blogspot.com
Re: De entero positivo a binario no aceptar letras ni negativos
« Respuesta #2 en: Martes 28 de Abril de 2009, 02:12 »
0
Quizá utilizar el valor de retorno no es la mejor opcion ya que el manejo de errores no se asegura en un 100%. Es preferible manejar el dato ingresado como una cadena de caracteres, validar ascii a ascii lo ingresado y en caso de exito utilizar atoi para convertir el dato en un numero...incluso existen comandos que validan si lo ingresado es numero o letra

Saludos!

fachamix

  • Miembro MUY activo
  • ***
  • Mensajes: 173
  • Nacionalidad: ar
    • Ver Perfil
Re: De entero positivo a binario no aceptar letras ni negativos
« Respuesta #3 en: Martes 28 de Abril de 2009, 02:35 »
0
Código: C
  1. #include <stdio.h>
  2. #include <conio.h>
  3. main()
  4. {
  5. float a[16];
  6. int ne,x,swi;
  7. clrscr();textcolor(9);textbackground(12);clrscr();
  8. printf("Este progrograma esta diseñado para convertir un numero entero positivo decimal a binario.");
  9. printf("nnPara continuar con el programa presione ENTER");
  10. clrscr();textcolor(9);textbackground(12);clrscr();
  11. intonum:
  12. printf("Introduzca el numero entero positivo que desea convertir a binario:");
  13. scanf("%i",ne);
  14. if(ne<0)
  15. {
  16. err:
  17. printf("Ha introducido un numero negativo, si desea intentar nuevamente presione 1 o si desea salir del programa presione 2n");
  18. scanf("%i",&swi);
  19. if(swi==1)
  20. {
  21. printf("n");
  22. goto intonum;
  23. }
  24. else
  25. if(swi==2)
  26. {
  27. goto fin;
  28. }
  29. else
  30. {
  31. printf("Error de entrada");
  32. goto err;
  33. }
  34. }
  35. else
  36. {
  37. for(x=15;x>=0;x=x-1)
  38. {
  39. if(ne>0)
  40. {
  41. a[x]=ne%2;
  42. }
  43. else
  44. {
  45. a[x]=0;
  46. }
  47. ne=ne/2;
  48. }
  49. for(x=0;x<=15;x++)
  50. {
  51. printf("%.0f",a[x]);
  52. }
  53. }
  54. fin:
  55. }
  56.  

primero , creo que no estas utilizando completamente el lenguaje C, mucho menos las librerias estandar de que trae el compilador.

segundo, NO UTILIZES GOTO .... NO NO NO NO, NO USES GOTO POR FAVOR, es la peor practica de un programador, no solo porque no es estructurado, el codigo que genera, es ineficiente.


las librerias estandar de C te brindan funciones como isdigit, o , isletter, etc etc etc, por lo que veo estas usando alguna version de BORLAND, cuya caracteristica principal , es la ayuda que traen sus productos, te sugiero que busques en la ayuda, en todo caso si no sabes que hacer despues te tiro el algoritmo, y si no te sale con el algoritmo, te paso el codigo,

es muy simple, sencillo, y legible.

intentalo, la satisfaccion de hacerlo por uno propio es impagable
La muerte vive celosa, de mi amada flor la vida. Dicen que me anda buscando, ojala si un dia me pilla. Me alle MACHAO Y CANTANDO PA QUE SE MUERA DE ENVIDIA