Autor
|
Tema: Error al comparar datos (Leído 2,682 veces)
|
Luffy97
Desconectado
Mensajes: 15
|
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: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <ctype.h> void main() { srand(time(NULL)); int r, res, i; bool exit = false, ok; char retry; printf("JOC DE ENDEVINAR EL NUMERO\n\n"); do { r = (rand() % 10) + 1; i = 0; do{ printf("Introdueix un numero (1-10): "); /*-------------------------------------------*/ /*-------------------------------------------*/ /*-------------------------------------------*/ ok = scanf("%i", &res); /*-------------------------------------------*/ /*-------------------------------------------*/ /*-------------------------------------------*/ while (getchar() != '\n'); if (ok && res >= 1 && res <= 10 ) { if (res < r) { printf("Nº massa baix\n"); } else if (res > r) { printf("Nº massa alt\n"); } else if (res == r) { printf("Has encertat!\n"); exit = true; } i++; } else { printf("No has introduit un valor disponible\n"); } }while (i < 12 && exit == false ); printf("Intents realitzats: %d\n", i); exit = false; do{ printf("Vols tornar a jugar? (Y/N): "); scanf("%c", &retry); retry = towlower(retry); while (getchar() != '\n'); if (retry == 'n') { exit = true; } else if (retry == 'y') { } else { printf("Introdueix una opcioo vàlida\n"); } }while (retry != 'y' && retry != 'n'); } while (exit == false); system("pause"); }
Gracias por su ayuda. Un saludo.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
Mensajes: 15
|
Me podries encarrilar un poco, no entiendo muy bien a lo que te refieres... Gracias.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
Mensajes: 1.603
|
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
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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 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
Mensajes: 15
|
Muchas Gracias por vuestra ayuda, me ha sido de ayuda. Un saludo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
comparar y eliminar datos de un fichero
PHP
|
Roc668
|
1
|
3,298
|
13 Diciembre 2009, 17:43 pm
por Maox
|
|
|
Comparar esquemas de dos bases de datos
.NET (C#, VB.NET, ASP)
|
criskapunk
|
0
|
2,930
|
1 Agosto 2011, 18:48 pm
por criskapunk
|
|
|
Error al comparar cadena
Java
|
mapers
|
1
|
1,873
|
3 Julio 2012, 10:08 am
por ollo
|
|
|
Comparar datos
Java
|
nolasco281
|
1
|
1,599
|
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,512
|
11 Enero 2016, 15:33 pm
por Joe Fraddy
|
|