Escribí un programa usando la declaración de cambio de caso y pedí un carácter para la entrada, pero no solicita el carácter en la ventana de la consola, sino que lo omite por completo.
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 "https://stackoverflow.com/" :
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 pongo un espacio antes %c
en el segundo scanf
funciona, alguien estaba diciendo algo sobre un espacio en blanco que encontré confuso
dijo el segundo scanf
está tomando el valor de \n
como personaje y si pongo un espacio antes %c
en el segundo scanf
¿No es eso un personaje y no ocupa el espacio como personaje?
Pero en este programa no se necesita el \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 alguien ayudarme? Quiero saber qué está mal.
Es probable que se lea en el carácter de ‘nueva línea’ que ingresa después de insertar los dos números. La entrada funciona como una cola de búfer. Alinea personajes. En este caso, le dijiste que leyera el primer número en &a , omitiera lo que estuviera en el medio, leyera el segundo número en &b y luego leyera el siguiente carácter. Dado que después de ingresar el número en &b, supongo que presionó ‘ENTRAR’, por lo que leerá ‘nueva línea’ en &opr. Una forma rápida de arreglar esto es agregar otra línea de ‘scanf(“%c”,&opr);’ inmediatamente después de su línea de operación scanf.
– TuanDT
18 de septiembre de 2015 a las 3:39
Pon un espacio antes
%c
en el segundoscanf
. stackoverflow.com/questions/13275417/…– Kaylum
18 de septiembre de 2015 a las 3:40
no usar
scanf
. c-faq.com/stdio/scanfprobs.html– jamesdlin
18 de septiembre de 2015 a las 3:45
El espacio en blanco es cualquier carácter “vacío”. Me gusta el espacio y la pestaña. Entonces
scanf(" %c", &opr)
.– Kaylum
18 de septiembre de 2015 a las 3:51
@Washington Guedes Si usa
scanf("%s", a);
cambiara
tipo dechar[2];
. además,scanf("%1s", a);
que tiene un riesgo reducido de desbordamiento del búfer es mejor.– MikeCAT
18 de septiembre de 2015 a las 4:33