此程序不允许我输入操作并直接进入开关中的默认大小写,打印"Error!!"
:
printf("Enter two integers: \n");
scanf("%d%d",&a,&b);
system("cls");
printf("Enter an operation : ");
scanf("%c",&op);
switch(op)
{
case '+': printf("%d+%d=%d\n",a,b,a+b); break;
case '*': printf("%d*%d=%d\n",a,b,a*b); break;
case '-': printf("%d-%d=%d\n",a,b,a-b); break;
case '/': printf("%d/%d=%d\n",a,b,a/b); break;
default: printf("Error!! \a \n");
}
return 0;
但是,当我在下面的“输入两个整数”之前输入“输入操作”的printf语句时,程序运行顺利。有没有人知道第一个程序会出现什么问题?
printf("Enter an operation : ");
scanf("%c",&op);
printf("Enter two integers: \n");
scanf("%d%d",&a,&b);
system("cls");
switch(op)
{
case '+': printf("%d+%d=%d\n",a,b,a+b); break;
case '*': printf("%d*%d=%d\n",a,b,a*b); break;
case '-': printf("%d-%d=%d\n",a,b,a-b); break;
case '/': printf("%d/%d=%d\n",a,b,a/b); break;
default: printf("Error!! \a \n");
}
return 0;
答案 0 :(得分:2)
如果添加
printf("%d\n", op)
在第一个版本的scanf("%c", &op);
之后,您会看到op
的值为10或14.这是\n
(换行符)或\r
(回车)。
explanation for that behaviour是:
指定 c 时,会读取通常跳过的空白字符。
要在第二个数字后忽略CR / NL,请将scanf("%c", &op);
更改为
scanf(" %c", &op);
答案 1 :(得分:0)
考虑这行代码:
scanf("%d%d", &a, &b);
如果编译并运行以下代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
int a, b;
scanf("%d%d", &a, &b);
printf("a:%d b:%d\n", a, b);
return EXIT_SUCCESS;
}
我们如何将a
设置为1
,将b
设置为2
?如果我输入12
,那么12
的{{1}}和a
的{{1}}。我认为你缺少两个格式说明符之间的空格。