| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
MasterKiller
Registrado: 26 Sep 2007 Mensajes: 11
| Publicado: 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
| Publicado: 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:
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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |
 |
|
|