Progtwigción en C: carácter en scanf

tener problemas con el carácter scanf … al ejecutar el progtwig no me permite ingresar un carácter un progtwig cuando ingrese el número entero imprime el printf y pasa al último …

#include  #include  #define EG 0.23 #define AG 0.70 #define TG 0.15 main() { int posothta; char eidos; float poso; printf("Dwse posothta grammatosimwn: "); scanf("%d",&posothta); printf("Dwse to eidos grammatoshmou: "); scanf("%c",&eidos); if(eidos=='E' || eidos=='e'){ poso=posothta*EG; printf("To poso pou plirwnoume einai: %f",poso); }else if(eidos=='A' || eidos=='a'){ poso=posothta*AG; printf("To poso pou plirwnoume einai: %f",poso); }else if(eidos=='T' || eidos=='t'){ poso=posothta*TG; printf("To poso pou plirwnoume einai: %f",poso); }else{ printf("Kapou exei gine kapoio la9os"); } return 0; } 

Cuando haces un scanf() toma el valor que solicitas solo … por ejemplo:

 scanf("%d",&posothta); 

Digamos que entro 5 aquí. Realmente, stdin obtuvo 2 caracteres: '5' y '\n' (porque tuve que presionar la tecla enter y eso genera un carácter de nueva línea).

Así que en posothta va el 5, pero esa nueva línea molesta se queda ahí sentada. El siguiente scanf() ahora está buscando un personaje, y dado que el carácter de nueva línea ( '\n' ) es de hecho un personaje, el progtwig no hace preguntas, simplemente recoge esa nueva línea y sigue adelante.

Cambie su código a:

 scanf(" %c",&eidos); 

Omitiré a scanf() que “Quiero que omita cualquier carácter de espacio en blanco, luego tome el siguiente”. Para scanf() un carácter de espacio en blanco incluye no solo espacios, sino también nuevas líneas.

Necesitas flashear el búfer:

 printf("Dwse posothta grammatosimwn: "); scanf("%d",&posothta); flushall(); printf("Dwse to eidos grammatoshmou: "); scanf("%c",&eidos); 

Función flushall ():

 #include  int flushall( void ); 

Descripción:

La función flushall () borra todos los búferes asociados con las secuencias de entrada y escribe cualquier búfer asociado con las secuencias de salida. Una operación de lectura posterior en un archivo de entrada hace que se lean nuevos datos del archivo o dispositivo asociado.

Llamar a la función flushall () es equivalente a llamar a fflush () para todos los archivos abiertos.

Devoluciones:

El número de streams abiertas. Cuando se produce un error de salida al escribir en un archivo, se establece la variable global errno.