buenas
hice un programa que pide al usuario ingresar la edad para ver si puede votar . necesito hacer un tipo de validación para que el programa solo acepte números y si por error el usuario introduce un carácter le tire un mensaje de error y le pida de nuevo que introduzca la edad. tiene que ser en lenguaje C y uso devc++
este es el código
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
int main()
{
int edad;
int resp=1;
while(resp==1)
{
printf("\n\t\t\t\tPRACTICA #1\n");
printf("\n\t\tPrograma que permita capturar la edad e indique con un\n ");
printf("\t\t mensaje en pantalla si la persona puede votar o no.\n\n");
printf("\n INGRESE LA EDAD: ");
scanf("%d",&edad);
if(edad>=18){
printf("\n <<EL USUARIO PUEDE VOTAR>>\n");
}
if((edad>0)&&(edad<18)) {
printf("\n << EL USUARIO NO PUEDE VOTAR>>\n");
}
if (edad<0){
printf("\t\n<<ERROR>>OPCION INVALIDA\n\n ");
}
printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
scanf("%d", &resp);
while (( resp !=1) && (resp !=0 ))
{
printf("\n<<opcion invalida>>\n");
printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
scanf( "%d", &resp);
}
if (resp==0){
exit(0);
}
else if (resp == 1){
resp=1;
}
system("cls");
}
getch();
}
gracias de antemano
Lo que puedes hacer es leer la edad a un array de caracteres, y después uno a uno haces esta comprobación:
if(edad[0] >= 0 && edad[0] <= 9)
Cuando tengas comprobado que todos son números, lo pasas a int y listo.
Puedes controlar si lo que te pasan son números o letras con código ASCII , si están dentro de un rango son números y sino son caracteres u otra cosa.
http://www.elcodigoascii.com.ar/codigo-americano-estandar-intercambio-informacion/codigo-ascii.gif
hice lo que me recomendaste pero ahora tengo un problema y es que quiero que si el usuario introduzca 18 le salga puede votar,
o sea que entre al if en donde esta la condicion de que si puede votar o no
es que no entra a ese if
lo hice asi
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
int main()
{
char edad[0];
int resp=1,valida=1;
while(resp==1)
{
do{
valida=1;
printf("\n\t\t\t\tPRACTICA #1\n");
printf("\n\t\tPrograma que permita capturar la edad e indique con un\n ");
printf("\t\t mensaje en pantalla si la persona puede votar o no.\n\n");
printf("\n INGRESE LA EDAD: ");
scanf("%s",edad);
if(edad[0]<'0')
valida=0;
if(edad[0]>'9')
valida=0;
if(valida==0){
printf("ERROR<<OPCION INVALIDA>>.\n");
}
{
system("cls");}
}while(valida=1);
if(edad[0]>=18){
printf("\n <<EL USUARIO PUEDE VOTAR>>\n");
}
if((edad[0]>0)&&(edad[0]<18)) {
printf("\n << EL USUARIO NO PUEDE VOTAR>>\n");
}
if (edad[0]<0){
printf("\t\n<<ERROR>>OPCION INVALIDA\n\n ");
}
printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
scanf("%d", &resp);
while (( resp !=1) && (resp !=0 ))
{
printf("\n<<opcion invalida>>\n");
printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
scanf( "%d", &resp);
}
if (resp==0){
exit(0);
}
else if (resp == 1){
resp=1;
}
system("cls");
}
getch();
}
gracias
La declaración del array:
char edad[0];
No es valida ya que se debe indicar el numero de elementos mediante una expresión de tipo entero (short, int , etc.) mayor que cero. Y se recomienda evitar el uso de la biblioteca conio de Borland, mas información en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).
Para validar la entrada debes verificar el valor de retorno de la función "scanf", esta indica el numero de conversiones con éxito. Un ejemplo de su uso:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num;
int rv;
int ch;
while (1){
printf("Numero: ");
fflush(stdout);
if ((rv = scanf("%d", &num)) == EOF)
return EXIT_FAILURE;
else if (rv == 1)
break;
while ((ch = getchar()) != EOF && ch != '\n')
;
}
printf("El numero es %d\n", num);
return EXIT_SUCCESS;
}
Un saludo
buenas de nuevo
ahora si que el programa esta ya casi cocido pero tengo un pequeño problema es que en la parte
else if (edad[0]>0 && edad[0]<18){
printf("\n << EL USUARIO NO PUEDE VOTAR>>\n");
}
no me entra si no que sale que el usuario puede votar,para ver si me pueden ayudar o decirme cual es el error. gracias
este es el codigo completo
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
int main()
{
char edad[0];
int resp=1;
while(resp==1)
{
printf("\n\t\t\t\tPRACTICA #1\n");
printf("\n\t\tPrograma que permita capturar la edad e indique con un\n ");
printf("\t\t mensaje en pantalla si la persona puede votar o no.\n\n");
printf("ingrese numero: ");
scanf("%s", edad);
if((edad[0]>='a' && edad[0]<='z')||(edad[0]>='A' && edad[0]<='Z')){
printf("\n ESTE NO ES NUMERO\n\n");
}
else if (edad[0]=='-'){
printf("\n ES UN NUMERO pero no es POSITIVO\n\n ");
}
else if(edad[0]>=18){
printf("\n <<EL USUARIO PUEDE VOTAR>>\n");
}
else if (edad[0]>0 && edad[0]<18){
printf("\n << EL USUARIO NO PUEDE VOTAR>>\n");
}
printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
scanf("%d", &resp);
while (( resp !=1) && (resp !=0 ))
{
printf("\n<<opcion invalida>>\n");
printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
scanf( "%d", &resp);
}
if (resp==0){
exit(0);
}
else if (resp == 1){
resp=1;
}
system("cls");
}
getch();
}