psr*_*esh 2 c scanf char dev-c++ switch-statement
我使用 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;
Run Code Online (Sandbox Code Playgroud)
但是当我%c在第二个之前放置一个空格时,scanf它起作用了,有人在谈论我发现令人困惑的空格
他说第二个scanf是取值\n作为字符,如果我%c在第二个之前放一个空格scanf不是一个字符,它不把空格作为字符吗?
但是在这个程序中它不以 the\n作为字符
int main()
{
char a;
printf("\ngive a char\n");
scanf("%c",&a);
printf("%c",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这真的很令人困惑,任何人都可以帮助我,我想了解出了什么问题。
每次使用这种格式的 scanf 时:
scanf("%c",&a);
Run Code Online (Sandbox Code Playgroud)
它留下一个换行符,将在下一次迭代中使用。您提到的最后一个程序只有一个“scanf”。尝试使用另一个 scanf。你会遇到同样的问题。
所以为了避免空格,你必须写:
scanf(" %c",&opr);
Run Code Online (Sandbox Code Playgroud)
格式字符串前的空格告诉 scanf 忽略空格。或者它更好地使用
getchar();
Run Code Online (Sandbox Code Playgroud)
它会消耗你所有的换行符
| 归档时间: |
|
| 查看次数: |
4478 次 |
| 最近记录: |