Autor
|
Tema: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros (Leído 12,866 veces)
|
KuraraGNU
Desconectado
Mensajes: 209
|
asi tengo el codigo if (opcion>3 || opcion<1 || opcion != 10) { rintf("\n Porfavor ingrese un valor valido (1-8), presione una tecla para salir:"); getch(); menu(primero);//primero es una lista enlazada no tiene importancia aca } Al ingresar la letra sale este printf en una nueva ventana (ventana de c en blanco con ese mensaje), al apretar enter deberia entrar al menu, pero presiono enter muestra el menu en 1 segundo y vuelve a mostrar el mensaje. Entonces tengo que ver el código entero, porque tiene pinta que lo que ocurre es que ese enter que presionas lo toma como entrada para el propio menu, que no se qué hace, creo que en c tienes que tener un recolector de basura, sino se queda lo que has escrito por teclado almacenado y siempre que haga falta que entres algo por teclado cojerá lo que ya has puesto, ¿es c o c++? Mira yo con solo esa parte no te puedo ayudar.
|
|
|
En línea
|
|
|
|
Caster
|
¿es c o c++? Fíjate en el título del post Déjanos el código completo por favor. Saludos
|
|
|
En línea
|
|
|
|
ZedGe
Desconectado
Mensajes: 154
|
El problema del codigo es que es demasiado no hara mucho spam? xD como hago para ponerle barras al codigo para que esto no sea tan extenso?
|
|
|
En línea
|
|
|
|
Leyer
Desconectado
Mensajes: 786
leyer@elhacker.net
|
lee la opcion asi, luego la conviertes a entero char option[2]; if(opt >3&&opt >10||opt ==0)printf("fuera");
PD: 2 paginas en esta boludes
|
|
« Última modificación: 30 Diciembre 2011, 20:40 pm por Leyer »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Como ya te comentaron hay que revisar el código completo del programa. En cuanto a utilizar solo funciones parte de la biblioteca estándar de C un problema es el uso (en el fragmento de tu primer mensaje) de getch que no lo es (es parte de la biblioteca conio de Borland).
La operación se debe separar en tres partes: primero debes obtener la entrada, validar que sea un numero y por ultimo verificar que este en el rango valido (en tu caso 1 .. 3 o bien 10).
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Como ya te comentaron hay que revisar el código completo del programa. En cuanto a utilizar solo funciones parte de la biblioteca estándar de C un problema es el uso (en el fragmento de tu primer mensaje) de getch que no lo es (es parte de la biblioteca conio de Borland).
La operación se debe separar en tres partes: primero debes obtener la entrada, validar que sea un numero y por ultimo verificar que este en el rango valido (en tu caso 1 .. 3 o bien 10).
Para el primer paso puedes utilizar la función fgets, para el segundo la función sscanf y para el tercero una sentencia de selección "switch".
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
KuraraGNU
Desconectado
Mensajes: 209
|
La operación se debe separar en tres partes: primero debes obtener la entrada, validar que sea un numero y por ultimo verificar que este en el rango valido (en tu caso 1 .. 3 o bien 10).
Un saludo
No entiendo por qué queréis que compruebe que sea un número, yo es que de C no se, quizás es por eso que no comprendo, yo soy de programación orientada a objetos, más concretamente de java, pero si el chaval lo que quiere es que simplemente cuando ingreses algo que no sean ni 1 2 3 o 10 salte el mensaje no se por qué hay que validar que sea número, ¿es que no se puede considerar como un char y compararlo como tal en vez de hacer tantas conversiones? Aunque claro, de hacerlo así quizás tenga que cambiar esa condición que ha escrito, ¿no? Bueno os dejo a vosotros que se ve que sabéis más, yo hice lo que pude, Espero no haber supuesto un impedimento.
|
|
|
En línea
|
|
|
|
ZedGe
Desconectado
Mensajes: 154
|
el getch a mi me funciona solo con
#include <stdlib.h> #include <stdio.h>
no se por que xD
lo que se me ocurrio es hacer mi menu con switch y con case y agregar un default
|
|
|
En línea
|
|
|
|
Caster
|
lo que se me ocurrio es hacer mi menu con switch y con case y agregar un default
Default para switch es lo equivalente a else en if, la única es que switch te da muchas más flexibilidad
|
|
|
En línea
|
|
|
|
ZedGe
Desconectado
Mensajes: 154
|
Pero es la opcion mas rentble :S aqui el codigo resumido solo deje lo necesario estructuras.h #ifndef ESTRUCTURAS_H_INCLUDED #define ESTRUCTURAS_H_INCLUDED
typedef struct datosClientes{ //Datos del nodo char RUT[10]; //Variable que contiene el rut char Nombre[15]; //Variable que contiene Nombre char Apellido[15]; ////Variable que contiene el Apellido int Telefono; //Variable que contiene el telefono char direccionTipo[10]; //Variable que contiene si es pasaje,avenida o calle char direccionCalle[25]; //Variable que contiene la calle char direccionComuna[15]; //Variable que contiene la comuna char numeroCuenta[8]; //Variable que contiene el numero de la cuenta int Saldo; //Variable que contiene el saldo int Giro; //Variable que contiene el giro int Deposito; //Variable que contiene el deposito } Datos; //Llamado estructura
typedef struct Nodo { //Creacion del nodo Datos Cliente; struct Nodo *sgte; } Nodo; #endif // ESTRUCTURAS_H_INCLUDED menuPrincipal.c #include <estructuras.h> #include <stdlib.h>
int menu(Nodo *primero)//Creacion Del Menu { int opcion=0;//Variable que Guarda la opcion del menu system("cls");//Se borra la pantalla printf("\n\n\nIngrese El Numero De La Opcion Deseada :\n");//Se despliega el menu printf("\n\n1.- Ingresar Una Nueva Cuenta"); printf("\n2.- Mostrar Cuentas Actuales"); printf("\n3.- Eliminar Una Cuenta"); printf("\n10.- Salir"); printf("\n"); scanf("%d",&opcion); //Se guarda la opcione eljida
system("cls");//Se limpia la pantalla
if(opcion == 1)//Si la opcion es 1 se llama a la funcion agregarCuenta { agregarCuenta(primero); } if(opcion == 2)//Si la opcion es 2 se llama a la funcion mostrarCuenta { mostrarCuenta(primero); } if(opcion == 3) //Si la opcion es 3 se llama a la funcion eliminarCuenta { eliminarCuentas(primero); } if(opcion == 10) //Si la opcion es 10 se cierra el programa { exit(1); } }
int main() //Funcion Main { Nodo *primero = crearNodo(); //Se crea un nuevo nodo llamado primero primero= NULL; //Este nodo apuntara a la lista completa menu(primero); //Se pasa como parametro al Menu y se llama return 0; } eliminar.c #include <estructuras.h> #include <stdlib.h> #include <stdio.h>
void eliminarCuentas(Nodo *primero)//Funcion para eliminar una cuenta completamente { system("cls"); int opcion; int encontrado=0; //Variable que nos servira para saber si encuentra o no coincidencia printf("\n\n\nIngrese El Numero De La Opcion Deseada :\n");//Menu para seleccionar parametro por el cual buscar la cuenta printf("\n\n1.- Eliminar Por RUT"); printf("\n10.- Salir"); printf("\n"); scanf("%d",&opcion);//Lectura de la opcion elegida por el usuario system("cls");
if(primero==NULL)//Si no existen cuentas se informa de aquello { system("cls"); printf("\n\n\n\n\n\t\t\tNO HAY CUENTAS REGISTRADAS"); getch(); eliminarCuentas(primero); }
Nodo *apuntado = crearNodo(); //Se crea un nodo para ir recorriendo la lista Nodo *datoBuscado = crearNodo(); //Se crea un nodo que contendra los datos buscados Nodo *anterior = crearNodo(); //Se crea un nodo para recorrer la lista un nodo mas atras
if(opcion == 1) //Se inicia la opcion 1 { printf("\n\n\t\t ELIMINAR UNA CUENTA POR EL RUT DEL TITULAR"); printf("\n\t\t\t------------------------------------"); printf("\n\t\t\t------------------------------------\n\n"); printf("INGRESE RUT DEL TITULAR DE LA CUENTA A ELIMINAR:"); //Se le pide al usuario que ingrese el RUT de la cuenta a eliminar scanf("%s",datoBuscado->Cliente.RUT);fflush(stdin);//Se guarda este valor en el auxiliar datoBuscado anterior=NULL; //A anterior le asignamos el valor NULL para ir un paso atras apuntado=primero;//A apuntado le asignamos el primer nodo de la lista
while(apuntado!=NULL)//MIENTRAS apauntado sea distinto de NULL (Existen Datos) { if(strcmp(apuntado->Cliente.RUT,datoBuscado->Cliente.RUT)==0) //SI el dato de la cuenta apuntado es igual al ingresado por el usuario { if(anterior==NULL) //SI anterior es igual a nulo (si solo existe un cliente ingresado) { system("cls"); primero=apuntado->sgte;//El inicio de la lista sera el siguiente al antiguo primer nodo printf("\n\n\n\n\n\n\n\t\t\t\tBORRANDO CLIENTE"); getch(); encontrado=1;//Se le asigna un 1 (se encontro coincidencia) eliminarCuentas(primero); //se retorna al menu } else //SI NO: Si el dato no esta en el primer nodoCuenta { system("cls"); anterior->sgte=apuntado->sgte; //El siguiente de anterior apuntara al siguiente de apuntado en caso de que el dato este en el medio printf("\n\n\n\n\n\n\n\t\t\t\tBORRANDO CUENTA"); getch(); encontrado=1;//Se le asigna un 1 (se encontro coincidencia) eliminarCuentas(primero); //se retorna al menu } } anterior=apuntado;//Si el dato no esta en el primer Nodo la lista se hace avanzar apuntado=apuntado->sgte; //anterior sera igual al primer Nodo y apuntado avanzara un Nodo }//cierra While
if(encontrado == 0) //Si no se encontro una coincidencia { system("cls"); printf("\n\n\n\n\n\n\n\t\tNO SE ENCONTRO EL RUT DEL TITULAR DE LA CUENTA A ELIMINAR"); getch(); encontrado=1;//Se le asigna un 1 (se encontro coincidencia) eliminarCuentas(primero); //se retorna al menu } }//Cierra opcion 1
if(opcion == 10) //SI opcion es igual a 10 el programa volvera al menu principal { menu(primero); } }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Ayuda] modificar "start page" en "internet explorer" con "batch"
Scripting
|
taton
|
7
|
17,255
|
20 Septiembre 2006, 01:45 am
por taton
|
|
|
El Nuevo ImgBurn no tiene la opción de "Read" sólo de escritura "Write" (¿?)
Software
|
Ad0nis
|
0
|
3,556
|
27 Octubre 2006, 14:10 pm
por Ad0nis
|
|
|
Como sumo los numeros de un entero hasta que me de "n" numeros (Resuelto)
« 1 2 »
Programación C/C++
|
¡Micronet!
|
18
|
10,779
|
16 Noviembre 2010, 00:26 am
por ¡Micronet!
|
|
|
recursos visual basic, """"""proceso inmortal"""""
Análisis y Diseño de Malware
|
Dark4ngel
|
7
|
14,122
|
3 Noviembre 2011, 10:42 am
por Dark4ngel
|
|
|
La Operacion en varios pasos genero errores... AYUDA AQUI"""""
Programación Visual Basic
|
JoseCheO
|
1
|
8,028
|
23 Diciembre 2011, 16:57 pm
por JoseCheO
|
|