Stack Overflow en español Asked on February 9, 2021
Tengo un pequeño problema con los caracteres en c. En una de las prácticas me piden repetir el programa mientras el usuario decida seguir introduciendo datos.
Este es el programa:
void introducirPosiciónB(float *Xb,float *Yb) {
printf("Posición (x) de la persona? ");
scanf("%f",Xb);
printf("Posición (y) de la persona ");
scanf("%f",Yb);
}
int main(){
float Xa, Ya, Xb, Yb;
char eleccion;
introducirPosiciónA(&Xa,&Ya,);
do{
introducirPosiciónB(&Xb,&Yb);
printf("nnOtro? (y or n)"); //Aquí esta el problema
scanf("%c",&eleccion);
}
while(eleccion!='n');
return 0;
}
Las funciones de dentro del main me vienen ya dadas por lo que eso está bien.
El problema surge cuando al llegar al scanf del carácter avanza sin pararse a leerlo, lo ignora y repite el programa sin dejarte opción a introducir n
He probado también por cambiar el scanf por getch(eleccion) pero tampoco funciona.
Si alguien puede ayudarme lo agradecería mucho.
Gracias por leerlo al menos.
SOLUCIÓN:
scanf(" %c", &eleccion);
Repito muchísimas gracias a todos!!!
El problema es que cuando tecleas "n" (cualquier caracter), estás ingresando dos caracteres: "n" y un "n".
Con
scanf("%c",&eleccion);
lees el primer caracter y dejas el "n" en el buffer de entrada. Cuando vas a ejecutar el siguiente scanf
, éste encuentra el "n" y te lo devuelve.
Usa esto:
scanf("%c%*c",&eleccion);
El formato %*c
, con un asterico entremedio, significa que hay que leer un caracter y descartarlo.
Nota: No he probado esto en Windows; puede que el buffer contenga 'rn', dos caracteres en lugar de uno. Alguien aportara un comentario clarificador.
Demo
Elimine la función introducirPosicion
y otras declaraciones irrelevantes. La versión mínima, completa que aborda el problema es:
#include <stdio.h>
int main() {
char eleccion;
do {
printf("nnOtro? (y or n)"); //Aquí esta el problema
scanf("%c%*c", &eleccion);
} while (eleccion != 'n');
return 0;
}
produce:
Otro? (y or n)y
Otro? (y or n)n
RUN FINISHED; exit value 0; real time: 2s; user: 0ms; system: 0ms
Answered by Candid Moe on February 9, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP