leer caracteres cadenas cadena c char switch-statement scanf dev-c++

caracteres - Scanf no está escaneando el carácter% c pero omite la declaración, ¿por qué?



scanf char (4)

Cada vez que use scanf con este formato:

scanf("%c",&a);

deja una nueva línea que se consumirá en la próxima iteración. El último programa que usted mencionó tiene solo un "scanf". intenta usar otro scanf. obtendrás el mismo problema

así que para evitar espacios en blanco debes escribir:

scanf(" %c",&opr);

el espacio antes de la cadena de formato le dice a scanf que ignore los espacios en blanco. O es mejor usar

getchar();

Se consumirá toda su nueva línea

Escribí un programa usando la declaración de mayúsculas y minúsculas y pedí una entrada para char pero no pide el carácter en la ventana de la consola, pero se salta completamente

int main() { float a, b, ans; char opr; printf("/nGIVE THE VALUES OF THE TWO NUMBERS/n"); scanf(" %f %f",&a,&b); printf("/nGIVE THE REQUIRED OPERATOR/n"); //no display(echo) on the screen //opr = getch(); //displays on the screen //opr = getche(); scanf("%c",&opr); switch(opr) { case ''+'' : ans = a+b; printf("%f", ans); break; case ''-'' : ans = a-b; printf("%f", ans); break; case ''*'' : ans = a*b; printf("%f", ans); break; case ''/'' : ans = a/b; printf("%f", ans); break; case ''%'' : ans = (int)a % (int)b; printf("%f", ans); break; default : printf("/nGIVE A VALID OPRATOR/n"); } system("pause"); return 0;

pero cuando puse un espacio antes de %c en el segundo scanf , funciona que alguien estaba diciendo algo acerca de un espacio en blanco que me pareció confuso

Dijo que el segundo scanf está tomando el valor de /n como un personaje y si pongo un espacio antes de que %c en el segundo scanf no sea ese un personaje y ¿no toma el espacio como el personaje?

Pero en este programa no toma /n como el personaje

int main() { char a; printf("/ngive a char/n"); scanf("%c",&a); printf("%c",a); return 0; }

Esto es realmente confuso. Puede ayudarme. Quiero aprender qué está mal.


El problema es que está dejando el /n ingresado después de que los números no fueron consumidos y luego es leído por el segundo scanf() . Si comprueba el valor en opr , verá que es ''/ n''.



Intente agregar fflush (stdin) antes de escanear.