Autor
|
Tema: AYUDA PROGRAMA EN C:No detecta los tipo Char (Leído 2,071 veces)
|
Dayleap
Desconectado
Mensajes: 20
|
; esto forma parte de un programa mayor ; el porblema esta en que cuando lo ejecuto y le introduzco por teclado un valor tal que resp pasa a ser igual a ... por ejemplo '3f', es decir: resp[0]=3 resp[1]=f entonces me deberia de volver a pedir que escoja un nuevo nivel de dificultad pero no lo hace. Lo que hace es retornarme la parte entera del array y , si no tiene parte entera me devuelve un 0; LO QUE QUIERO QUE HAGA ES QUE SI INTRODUZCO UN CARACTER ME LO DETECTE Y ME DIGA QUE VUELVA A INTRODUCIR LA DIFICULTAD. MUCHAS GRACIAS int main(){ int control=0,n,i,dif; char resp[4]; printf("Nivel actual %i \n", dificultad); do{ printf("Elige el nuevo nivel[1..100]: \n"); fflush(stdin); scanf(" %s", &resp); n=strlen(resp); //COMPROBACIONES if(n<1||n>=4){control=1;} for(i=0;i<n;i++){ //letras if(resp[i]<'0'&& resp[i]>'9'){ control=2;}} switch(control){ case 1: printf("\nHas seleccionado un n\243mero no v\240lido\n\n");break; case 2: printf("El numero ha de contener solo digitos\n");break; case 0: dif=atoi(resp); if(dif>=1&&dif<=100){ printf("\nHas establecido numero de intentos máximo como: %i \n\n", dif);control=0;} else{printf("\nHas establecido un n\243mero no v\240lido\n\n"); control==1; } } }while(control==3 || control==2 || control==1); return 0;}
|
|
« Última modificación: 8 Mayo 2016, 14:28 pm por Dayleap »
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Bien, veo que lo has escrito deprisa y corriendo. Para otra vez formatea el código, se agradece verlo bien presentado.
Dentro del bucle do-while, pon la primera instrucción que lleve control a 0. Si hay algún fallo control empezará el bucle ya con código de error y no saldrás de él.
Para scanf, debes hacer que acepte un máximo de 4 caracteres, sino podrías crear desbordamiento de la variable resp. Sobre la variable resp, ella misma ya actúa como puntero y no debes pasarle la dirección de memoria.
No uses fflush(stdin) no es estándar y no va bien con todos los compiladores. Hay alternativas con funciones de librería y un poco de código.
resp<'0'&& resp>'9' puedes sustituirlo por la función de librería isdigit de ctype.h
En el 'case 0' has escrito, en su última instrucción control==1, una comparación sin efecto. Supongo que querías hacer una asignación.
|
|
|
En línea
|
|
|
|
HardForo
Desconectado
Mensajes: 219
HardForo.com
|
resp<'0'&& resp>'9' puedes sustituirlo por la función de librería isdigit de ctype.h Vale la pena cargar una libreria para eso ? si la libreria usa macros, claro que si Por ejemplo la libreria stdlib.h para poder usar EXIT_SUCCESS y/o EXIT_FAILURE usa de hecho macros asi que no hay ningun tipo de overhead en el programa. Respuesta inspirada en @MAFUS
|
|
« Última modificación: 6 Mayo 2016, 14:36 pm por boctulus »
|
En línea
|
HardForo: foro de Hardware y programación Se buscan Mods y colaboradores *
|
|
|
Dayleap
Desconectado
Mensajes: 20
|
Muchas gracias , la funcion isdigit hacer que funcione el codigo
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Desbordamiento del tipo char
Programación C/C++
|
0xDani
|
5
|
3,307
|
19 Octubre 2012, 15:51 pm
por 0xDani
|
|
|
Pasar tipo const char* a char
« 1 2 »
Programación C/C++
|
jorge_hura
|
15
|
11,598
|
25 Julio 2013, 09:50 am
por Eternal Idol
|
|
|
(Ayuda) Programa crashea al analizar una cadena (char *)
« 1 2 »
Programación C/C++
|
Seyro97
|
14
|
6,287
|
27 Mayo 2015, 09:18 am
por Eternal Idol
|
|
|
Ayuda con punteros de tipo char
Programación C/C++
|
bsantana
|
7
|
3,253
|
10 Enero 2016, 23:51 pm
por bsantana
|
|
|
Ayuda con subcadena de tipo char
Programación C/C++
|
Beginner Web
|
9
|
3,370
|
6 Julio 2018, 04:29 am
por engel lex
|
|