Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mozzard en 9 Octubre 2018, 22:04 pm



Título: Que falla en esta funcion??
Publicado por: Mozzard en 9 Octubre 2018, 22:04 pm
no me devuelve correctamente el valor y pues pase lo que pase el programa de acaba al instante

Código:
bool adios(bool s){
printf("Desea salir? [y/n]\n");
char k;
scanf("%s",&k);
if(k=='y'){
printf("Hasta otra!\n");
return false;
}else{
return true;
}
}



Título: Re: Que falla en esta funcion??
Publicado por: MAFUS en 9 Octubre 2018, 23:23 pm
Dos fallos:
El argumento s no sirve para nada, nunca lo usas. Bórralo.
Para conseguir un caracter es %c. %s es para conseguir una cadena.


Título: Re: Que falla en esta funcion??
Publicado por: Mozzard en 10 Octubre 2018, 17:42 pm
Okey, se ha quedado asi:
Código:
bool adios(){
printf("Desea salir? [y/n]\n");
char k;
scanf("%c",&k);
if(k=='y'){
printf("Hasta otra!\n");
return false;
}else{
return true;
}
}


Aun asi sigue fallando, ahora no me pide y o n y sigue con el programa.


Título: Re: Que falla en esta funcion??
Publicado por: Beginner Web en 10 Octubre 2018, 18:38 pm
Pues el error fatal es que la funcion es solo para devolver un valor... aunque tambien se puede modificar valores pasados por referencia o mostrar mensajes como en tu caso,  pero ya no respetaria lo que es una función :silbar:

Código
  1. bool adios(){
  2. char respuesta;
  3. cout<<"Desea continuar? S/N: ";cin>>respuesta;
  4. if(respuesta=='S' || respuesta=='s')
  5. return true;
  6. else
  7. return false;
  8. }
  9.  


Título: Re: Que falla en esta funcion??
Publicado por: MAFUS en 10 Octubre 2018, 19:22 pm
Seguro que has hecho una entrada por teclado antes. En ese caso se ha quedo '\n' dentro del buffer stdin y debes eliminarlo.
Cada vez que leas del teclado, por normal general, debes incluir un
Código:
while(getchar()!='\n');
eso vaciará el buffer hasta después de un carácter de nueva línea.
Digo por norma general porque fgets, gets, etc. sí adquieren el '\n' y la anterior sentencia creará una pausa.