Que falla en esta funcion??

Iniciado por Mozzard, 9 Octubre 2018, 22:04 PM

0 Miembros y 1 Visitante están viendo este tema.

Mozzard

no me devuelve correctamente el valor y pues pase lo que pase el programa de acaba al instante


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;
}
}

Programalo... sin miedo...

MAFUS

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.

Mozzard

Okey, se ha quedado asi:
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.
Programalo... sin miedo...

Beginner Web

#3
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 (java) [Seleccionar]
bool adios(){
char respuesta;
cout<<"Desea continuar? S/N: ";cin>>respuesta;
if(respuesta=='S' || respuesta=='s')
return true;
else
return false;
}

7w7

MAFUS

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
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.