Programación General > C/C++
De entero positivo a binario no aceptar letras ni negativos
(1/1)
alexistkd:
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 ---#include <stdio.h>#include <conio.h>main(){float a[16];int ne,x,swi;clrscr();textcolor(9);textbackground(12);clrscr();printf("Este progrograma esta diseñado para convertir un numero entero positivo decimal a binario.");printf("nnPara continuar con el programa presione ENTER");getch();clrscr();textcolor(9);textbackground(12);clrscr();intonum:printf("Introduzca el numero entero positivo que desea convertir a binario:");scanf("%i",?);if(ne<0){err:printf("Ha introducido un numero negativo, si desea intentar nuevamente presione 1 o si desea salir del programa presione 2n");scanf("%i",&swi);if(swi==1){printf("n");goto intonum;}elseif(swi==2){goto fin;}else{printf("Error de entrada");goto err;}}else{for(x=15;x>=0;x=x-1){if(ne>0){a[x]=ne%2;}else{a[x]=0;}ne=ne/2;}for(x=0;x<=15;x++){printf("%.0f",a[x]);}}fin:getch();}
Gracias de antemano.
Leo_Gutierrez:
Puedes evaluar el valor de retorno del Scanf(), mira esto :
--- Código: C ---#include <stdio.h>int main(){ signed int opcion; do { while(getchar() != 'n'); // Para vaciar el buffer. printf("nNumero: "); }while(scanf("%d", &opcion) != 1); printf("nnHas elegido : %d", opcion); return 0;} El programa termina hasta que se haya ingresado un numero, en caso contrario, vuelve a pedir el numero.
Salida:
--- Código: Text ---Numero: a Numero: f Numero: d Numero: 2 Has elegido : 2
betopin:
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:
--- Código: C ---#include <stdio.h>#include <conio.h>main(){float a[16];int ne,x,swi;clrscr();textcolor(9);textbackground(12);clrscr();printf("Este progrograma esta diseñado para convertir un numero entero positivo decimal a binario.");printf("nnPara continuar con el programa presione ENTER");getch();clrscr();textcolor(9);textbackground(12);clrscr();intonum:printf("Introduzca el numero entero positivo que desea convertir a binario:");scanf("%i",ne);if(ne<0) {err:printf("Ha introducido un numero negativo, si desea intentar nuevamente presione 1 o si desea salir del programa presione 2n");scanf("%i",&swi);if(swi==1){printf("n");goto intonum;}elseif(swi==2){goto fin;}else{printf("Error de entrada");goto err;}}else{for(x=15;x>=0;x=x-1){if(ne>0){a[x]=ne%2;}else{a[x]=0;}ne=ne/2;}for(x=0;x<=15;x++){printf("%.0f",a[x]);}}fin:getch();}
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
Navegación
Ir a la versión completa