我使用switch case语句编写了一个程序,并要求输入一个char但它不会在控制台窗口中询问char但是完全跳过它
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;
}
作为角色
<div id="image">
</div>
这真是令人困惑的任何人可以帮助我,我想知道什么是错的。
答案 0 :(得分:3)
每次使用此格式的scanf时:
scanf("%c",&a);
它留下了一个换行符,将在下一次迭代中使用。 你提到的最后一个程序只有一个&#34; scanf&#34;。尝试使用另一个scanf。你会遇到同样的问题。
所以要避免使用白色空格:
scanf(" %c",&opr);
格式字符串之前的空格告诉scanf忽略空格。或者更好地使用
getchar();
它将消耗所有换行符
答案 1 :(得分:1)
第二个程序确实将gcc -fsanitize=address
作为角色
也许你在输入其他字符之前根本没有输入\n
。
答案 2 :(得分:1)
问题是您在未使用的号码后离开\n
,然后由第二个scanf()
读取。
如果您检查opr
中的值,则会看到它&#39; \ n&#39;
答案 3 :(得分:-2)
尝试在scanf之前添加fflush(stdin)。