我使用 switch case 语句编写了一个程序,并要求输入一个字符,但它不要求控制台窗口中的字符,而是完全跳过它
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;
但是当我在 %c
前面加一个空格时在第二个scanf
有人在讲述一些关于空白的事情,我发现这很令人困惑
他说第二个scanf
取值 \n
作为一个字符,如果我在 %c
之前加一个空格在第二个scanf
那不是一个字符而且不是以空格为字符吗?
但是在这个程序中它并没有采用 \n
作为角色
int main()
{
char a;
printf("\ngive a char\n");
scanf("%c",&a);
printf("%c",a);
return 0;
}
这真的很令人困惑,任何人都可以帮助我,我想知道出了什么问题。
最佳答案
每次使用这种格式的 scanf 时:
scanf("%c",&a);
它留下一个换行符,该换行符将在下一次迭代中使用。 您提到的最后一个程序只有一个“scanf”。尝试使用另一个scanf。你也会遇到同样的问题。
所以为了避免空格,你必须写:
scanf(" %c",&opr);
格式字符串之前的空格告诉 scanf 忽略空格。或者最好使用
getchar();
它将消耗你所有的换行符
关于c - scanf 不扫描 %c 字符而是跳过该语句,这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32643397/