/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Validar numeros de entrada....

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
MasterKiller



Registrado: 26 Sep 2007
Mensajes: 11

MensajePublicado: 27/09/2007 6:04 pm
Título: Validar numeros de entrada....

Bueno amigos..
yo denuevo..,.
porfavor... keria ver si me echan una ayudadita con esto...
Nesesito saber como validar los datos de entrada....
cosa que al colocar una letra no se me caiga el programa...
tanto en la primera opcion que pide ingresar datos por teclado o archivo.... como en los punto...
porfavor echenme una ayudita plz...
este es mi programa...

Código:

//------------------------------------------------
/*-----------------INGRESO DE DATOS---------------*/
int ingresodatos()
{
  int n;
  while(n!=1)
  {
   printf("\t\aComo desea ingresar los datos:\n[0]por archivo-\n[1]por teclado-  ");
   scanf("  %d",&n);
   if (n==0){system("cls");
             printf("\t\a\a\a***LO SENTIMOS****\nEsta vez no se puede de esa forma\n\n");
           getch();
             system("cls");}
   else if((n!=1)&&(n!=0))
   {system("cls");
        printf("\t\a\a***POR FAVOR***\nIngrese la opcion correcta\n");
           getch();
             system("cls");}
  }
    system("cls");   
    printf("\tIngrese los puntos\nPunto 1:\n");
    printf("X:");scanf("%f",&x);
    printf("Y:");scanf("%f",&y);
    printf("Punto 2:\n");
    printf("X:");scanf("%f",&x2);
    printf("Y:");scanf("%f",&y2);
    printf("Punto 3:\n");
    printf("X:");scanf("%f",&x3);
    printf("Y:");scanf("%f",&y3);
    printf("\nPunto 4:\n");
    printf("X:");scanf("%f",&x4);
    printf("Y:");scanf("%f",&y4);
    system("cls");
    return(0);
   
}
Echo con Dev C++


Porfavor amigos...
ayudenme en esto...
es que no nos an enseñado esto y kiero saberlo... ademas... tengo que entregar este trabajo!....
plz
gracias!....
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3588
Ubicación: Mexico

MensajePublicado: 27/09/2007 9:55 pm
Título:

Como ya te indicaron en el otro tema no es una buena idea utilizar una variable local (en tu caso la variable "n") sin darle antes un valor inicial:
Código:
int n;

while(n!=1)

/* ... */

Ya que el valor de "n" es "cualquier valor" y hay una posibilidad aunque pequeña de que "n" inicie con el valor 1 y entonces el programa se va por la borda.

Para verificar que la funcion scanf pudo realizar la conversion con exito debes verificar su valor de retorno, como tu solo indicas una conversion mediante:
Código:
scanf("  %d",&n);

Basta con verificar que su valor de retorno sea uno y colocar esta validacion en un bucle, por ejemplo la lectura y validacion de la variable "n" seria asi:
Código:
int ch;

/* ... */

puts("Indique el origen de los datos: ");
do {
   puts("0 ==> archivo");
   puts("1 ==> teclado");
   
   r = scanf("%d", &n);
   while ((ch = getchar()) !=EOF && ch != '\n')
      ; /* Descartamos el resto de la linea */
   
   /*
   ** La salida del bucle se realiza solo si la
   ** funcion scanf fue exitosa (r == 1) y si el
   ** valor de n es igual a 0 o 1.
   */
}while (r != 1 || n < 0 || n > 1);


El codigo para validar cada uno de los puntos es similar.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
MasterKiller



Registrado: 26 Sep 2007
Mensajes: 11

MensajePublicado: 28/09/2007 6:29 am
Título:

la primera parte la se validar... pero nesesito saber.. como unir la primera parte...
con la entrada d los puntos....
ayuda plz
y gracias rir3760!
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3588
Ubicación: Mexico

MensajePublicado: 28/09/2007 3:29 pm
Título:

Como ya te comente verificar que el usuario introduzca cada uno de los cuatro pares de puntos es similar a la verificacion de la opcion de menu, dentro de un bucle:

1) Le indicas al usuario que introduzca un valor (ya sea X o Y).
2) Lees este con scanf.
3) Verificas el valor de retorno de esa funcion, si este es igual a uno continuas con el siguiente valor, en caso contrario regresas al paso 1.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
MasterKiller



Registrado: 26 Sep 2007
Mensajes: 11

MensajePublicado: 30/09/2007 12:04 pm
Título:

Pero la idea es que se validen los primeros datos...
eso ya lo tengo claro...

pero no se como hacer que al ingresar el valor de x e y si este es una letra no se caiga... osea que vuelva a donde dice Punto 1... estos puntos son los puntos que conforman un triagulo...
pero nesesito que no se me caiga al ingresar una tecla...
Lo intente con un if que dijiera que si x es igual a isalpha, returne a preguntar denuevo por los puntos... pero no se como hacerlo retornar... se me cierra el programa si sucede esto... lo mismo hice con un While......pero no se terminarlo...

espero que me ayuden porfavor...
lo nesesito...
gracias...
bye
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3588
Ubicación: Mexico

MensajePublicado: 30/09/2007 1:53 pm
Título:

MasterKiller escribió:
pero nesesito que no se me caiga al ingresar una tecla

Como ya te comente tienes que colocar la lectura del dato dentro de un bucle y dentro de este verificar el valor de retorno de la funcion scanf.

MasterKiller escribió:
Lo intente con un if que dijiera que si x es igual a isalpha

Esa funcion no es para verificar numeros sino para verificar si un caracter es alfabetico.

Te pongo como ejemplo como validar el primer punto:
Código:
printf("\tIngrese los puntos\nPunto 1:\n");

while (1){
   int r; /* resultado */
   int ch;
   
   printf("X: ");
   fflush(stdout);
   
   /* Salir si la lectura fue exitosa */
   if (scanf("%f", &x) == 1)
      break;
   
   /* Caso contrario eliminar el resto de la linea */
   while ((ch = getchar()) != EOF && ch != '\n')
      ;
}


Los demas puntos los puedes verificar mediante un proceso casi identico.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
MasterKiller



Registrado: 26 Sep 2007
Mensajes: 11

MensajePublicado: 30/09/2007 6:03 pm
Título:

Muchas gracias amigo RIR3790...
me fue de mucha ayuda ese ejemplo...
muchas gracias nuevamente


Bye
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com