| 
	
		|  Autor | Tema: AYUDA PROGRAMA EN C:No detecta los tipo Char  (Leído 2,344 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,652 |  19 Octubre 2012, 15:51 pm por 0xDani
 |  
						|   |   | Pasar tipo const char* a char
							« 1 2 » Programación C/C++
 | jorge_hura | 15 | 12,721 |  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 | 7,151 |  27 Mayo 2015, 09:18 am por Eternal Idol
 |  
						|   |   | Ayuda con punteros de tipo char Programación C/C++
 | bsantana | 7 | 3,634 |  10 Enero 2016, 23:51 pm por bsantana
 |  
						|   |   | Ayuda con subcadena de tipo char Programación C/C++
 | Beginner Web | 9 | 3,933 |  6 Julio 2018, 04:29 am por engel lex
 |    |