Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Comprobar que el usuario ha ingresado un número y no otra cosa

Estas en el tema de Comprobar que el usuario ha ingresado un número y no otra cosa en el foro de C/C++ en Foros del Web. Saludos. Llevo un rato quebrandome la cabeza por que no logro hacer que mi programa identifique si el valor insertado por el usuario es un ...
  #1 (permalink)  
Antiguo 14/11/2011, 22:14
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 2 meses
Puntos: 1
Pregunta Comprobar que el usuario ha ingresado un número y no otra cosa

Saludos. Llevo un rato quebrandome la cabeza por que no logro hacer que mi programa identifique si el valor insertado por el usuario es un número o no. Intento hacer algo así:

if(número == int)
printf("El valor introducido es un número");
else
printf("El valor introducido no es un número");

Obviamente el compilador no me lo acepta, pero es para dar una idea de lo que quiero hacer. El pedazo de código en cuestión es este:
Código C:
Ver original
  1. ...
  2. inicio:
  3. printf("-Bienvenido. Teclee la clave del producto para iniciar una nueva transacci%cn\n", 162);
  4.  
  5. scanf("%i", &producto_clave);
  6.  
  7. if (producto_clave != int)
  8. {
  9. printf("Clave de producto incorrecta, la clave debe contener solo n%cmeros", 163);
  10. goto inicio;
  11. }
  12. ...

Saludos y gracias de antemano por su atención
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #2 (permalink)  
Antiguo 15/11/2011, 05:08
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 1 mes
Puntos: 228
Respuesta: Comprobar que el usuario ha ingresado un número y no otra cosa

scanf da como valor de retorno la cantidad de argumentos correctos que se detectaron, si pides un numero y ingressas letras, te devolvera cero.


Código C++:
Ver original
  1. inicio:
  2. printf("-Bienvenido. Teclee la clave del producto para iniciar una nueva transacci%cn\n", 162);
  3.  
  4.  
  5. if (scanf("%i", &producto_clave) != 1)
  6. {
  7. printf("Clave de producto incorrecta, la clave debe contener solo n%cmeros", 163);
  8. goto inicio;
  9. }
  #3 (permalink)  
Antiguo 15/11/2011, 09:28
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 11 meses
Puntos: 61
Respuesta: Comprobar que el usuario ha ingresado un número y no otra cosa

Opcion a eso:
Leer un string, no un entero. Parsear el string, y solo cuando has confirmado que calza con lo esperado, tranformarlo.
__________________
Visita mi perfil en LinkedIn
  #4 (permalink)  
Antiguo 22/11/2011, 23:50
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Comprobar que el usuario ha ingresado un número y no otra cosa

Muchas gracias, lo de usar el scanf en la condición me funcionó, aunque tengo un problema con eso también, ya que si el usuario coloca una letra o algo que no sea número, el flujo del programa lo regresa para volverle a pedir el número, y el problema es que como la variable ya fué valorada, la condición siempre se cumple y se hace un bucle infinito. Aquí el código en cuestión:

Código C:
Ver original
  1. printf("---Bienvenido---\n Teclee la clave del producto o de la acci%cn, para iniciar una nueva transacci%cn\n", 162, 162);
  2. goto comienzo;
  3. inicio2:
  4. printf("Teclee la clave del producto o de la acci%cn para iniciar una nueva transacci%cn", 162, 162);
  5. comienzo:        
  6. if (scanf("%i", &producto_clave) != 1)
  7. {
  8. printf("Clave de producto incorrecta, la clave debe contener solo n%cmeros", 163);
  9. producto_clave = 0;
  10. goto inicio2;
  11. }
¿Algún método para "formatear" la variable y dejarla sin ningún valor para que pueda ser revalorada? ¿O alguna idea?
Gracias
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #5 (permalink)  
Antiguo 23/11/2011, 05:01
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 1 mes
Puntos: 228
Respuesta: Comprobar que el usuario ha ingresado un número y no otra cosa

Pon una funcion para consumir el buffer, y empezar de nuevo. Por ejemplo, esta instruccion

while(getchar() != '\n');
  #6 (permalink)  
Antiguo 27/11/2011, 21:59
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Comprobar que el usuario ha ingresado un número y no otra cosa

Muchas gracias! Por fin logré avanzar en mi proyecto, saludos
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #7 (permalink)  
Antiguo 29/11/2011, 00:09
 
Fecha de Ingreso: febrero-2011
Ubicación: Paraguay
Mensajes: 59
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Comprobar que el usuario ha ingresado un número y no otra cosa

Te aconsejo que no uses el goto..ya no esta en uso.
No se usa mas esa forma de programar..
  #8 (permalink)  
Antiguo 29/11/2011, 12:21
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Comprobar que el usuario ha ingresado un número y no otra cosa

Lo se, es programación "spaghetti", ¿pero hay alguna otra forma de transferir el control de el programa a cierta parte de código específica? he leído que a veces un condicional es mejor, pero el goto es mucho más práctico y sencillo
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #9 (permalink)  
Antiguo 29/11/2011, 13:36
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 1 mes
Puntos: 228
Respuesta: Comprobar que el usuario ha ingresado un número y no otra cosa

Te parece sencillo si tu programa tiene 10 lineas de codigo y no usa funciones. Y encima no tenes que probar propiedades sobre este.

Una buena practica seria cambiar los goto por bucles del tipo While o Do{}While();

Busca en internet o en los mismos foros que hay muchos ejemplo de gente que lo aplica.

Saludos

Etiquetas: programa, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:10.