elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error al comparar datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al comparar datos  (Leído 2,461 veces)
Luffy97

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Error al comparar datos
« en: 3 Diciembre 2015, 10:09 am »

Buenas a todos, el otro día hice un programa y tuve un problema... El programa trata de que pongas un numero aleatorio y que tu introduzcas un valor y te diga si lo has acertado o no. El problema viene en cuanto introduces el dato, Si pones numero superior a 10 o menor a 0 de error, si pones una letra también da error, pero si pones primero un numero seguido de una letra me lo acepta como numero. Y quiero solucionar esto de manera que si tu pones un numero que no sea valido tal sea seguido de letra o no te de error. No se si me he explicado bien... Aquí dejo el código:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <ctype.h>
  5.  
  6. void main() {
  7. srand(time(NULL));
  8. int r, res, i;
  9. bool exit = false, ok;
  10. char retry;
  11. printf("JOC DE ENDEVINAR EL NUMERO\n\n");
  12. do {
  13. r = (rand() % 10) + 1;
  14. i = 0;
  15. do{
  16. printf("Introdueix un numero (1-10): ");
  17. /*-------------------------------------------*/
  18. /*-------------------------------------------*/
  19. /*-------------------------------------------*/
  20. ok = scanf("%i", &res);
  21. /*-------------------------------------------*/
  22. /*-------------------------------------------*/
  23. /*-------------------------------------------*/
  24. while (getchar() != '\n');
  25. if (ok && res >= 1 && res <= 10 ) {
  26. if (res < r)
  27. {
  28. printf("Nº massa baix\n");
  29. }
  30. else if (res > r) {
  31. printf("Nº massa alt\n");
  32. }
  33. else if (res == r) {
  34. printf("Has encertat!\n");
  35. exit = true;
  36. }
  37. i++;
  38. }
  39. else
  40. {
  41. printf("No has introduit un valor disponible\n");
  42. }
  43. }while (i < 12 && exit == false );
  44. printf("Intents realitzats: %d\n", i);
  45. exit = false;
  46. do{
  47. printf("Vols tornar a jugar? (Y/N): ");
  48. scanf("%c", &retry);
  49. retry = towlower(retry);
  50. while (getchar() != '\n');
  51. if (retry == 'n')
  52. {
  53. exit = true;
  54. }
  55. else if (retry == 'y')
  56. {
  57.  
  58. }
  59. else
  60. {
  61. printf("Introdueix una opcioo vàlida\n");
  62. }
  63. }while (retry != 'y' && retry != 'n');
  64. } while (exit == false);
  65. system("pause");
  66. }


Gracias por su ayuda.
Un saludo.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Error al comparar datos
« Respuesta #1 en: 3 Diciembre 2015, 10:17 am »

En primer lugar, pon int main, no void main. El programa ha de retornar un valor numérico.

El caso es, que scanf coge todo el valor numérico que puede.

Una posibilidad, es que tú manualmente busques por caracteres no-numéricos en la cadena de entrada.


En línea

Luffy97

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: Error al comparar datos
« Respuesta #2 en: 3 Diciembre 2015, 10:58 am »

Me podries encarrilar un poco, no entiendo muy bien a lo que te refieres...
Gracias.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Error al comparar datos
« Respuesta #3 en: 3 Diciembre 2015, 13:35 pm »

Puedes leer la linea introducida por el usuario en un char*, y luego recorrer cada caracter para comprobar si hay alguno no numerico.

Si todos son numéricos, utilizas la función int atoi(char*) para transformarlo a un número.

Es una solución más compleja. Si quieres una solución más simple, déjalo como está. Realmente no es un gran problema, mientras haya insertado algún número.
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Error al comparar datos
« Respuesta #4 en: 3 Diciembre 2015, 19:41 pm »

En la libreria ctype hay una macro que te viene muy bien:

int isdigit(int c)

devuelve un valor distinto de 0 si c es un número decimal.

Con ella repasas los caracteres de la cadena y si hay alguno que no sea un número lanzas un mensaje de error. ;)
« Última modificación: 3 Diciembre 2015, 19:54 pm por MAFUS » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Error al comparar datos
« Respuesta #5 en: 6 Diciembre 2015, 20:58 pm »

¡Buenas!

También puedes utilizar el valor de retorno de scanf.

scanf te devuelve la cantidad de parámetros leídos. Si intentas leer un entero y el usuario introduce un caracter scanf habrá leído cero parámetros y te devolverá cero. Si se introducen números y luego un caracter supongo (no lo he comprobado) que te leerá el numero que haya hasta el primer caracter no numérico. De todas formas el algoritmo sería el siguiente
Código:
si(scanf(un numero) == 0)
{
    //ha habido un error de lectura.

    //limpiamos la entrada
    while(getchar()) != '\n'); //la entrada acaba en intro
}
sino
{
    //hemos leido un numero, pero pueden quedar datos en la entrada (al menos el intro final). La limpiamos
    while(getchar()) != '\n'); //la entrada acaba en intro
}

Y completas los dos casos con el código que quieras, claro está.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Luffy97

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: Error al comparar datos
« Respuesta #6 en: 14 Marzo 2016, 09:58 am »

Muchas Gracias por vuestra ayuda, me ha sido de ayuda.
Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
comparar y eliminar datos de un fichero
PHP
Roc668 1 3,179 Último mensaje 13 Diciembre 2009, 17:43 pm
por Maox
Comparar esquemas de dos bases de datos
.NET (C#, VB.NET, ASP)
criskapunk 0 2,825 Último mensaje 1 Agosto 2011, 18:48 pm
por criskapunk
Error al comparar cadena
Java
mapers 1 1,756 Último mensaje 3 Julio 2012, 10:08 am
por ollo
Comparar datos
Java
nolasco281 1 1,503 Último mensaje 10 Junio 2014, 22:12 pm
por gordo23
Comparar datos de una consulta C# y MySQL
.NET (C#, VB.NET, ASP)
Joe Fraddy 1 3,328 Último mensaje 11 Enero 2016, 15:33 pm
por Joe Fraddy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines