每次我输入正确的字符输入时,都会执行默认语句。我遗漏了什么?
我的输出:
正确的输出:
#include <stdio.h>
void main() {
char ch = '?';
float f;
double a = 10.00, b = 20.00;
int i;
for (i = 0; i < 10; i++) {
scanf("%c", &ch);
switch (ch) {
case '+':
f = a + b;
printf("f = %.0f\n", f);
break;
case '-':
f = a - b;
printf("f = %.0f\n", f);
break;
case '*':
f = a * b;
printf("f = %.0f\n", f);
break;
case '/':
f = a / b;
printf("f = %.2f\n", f);
break;
default:
printf("invalid operator\n");
}
}
return 0;
}
发布于 2017-08-27 08:12:10
在尝试解析字符以外的内容之前,scanf()
函数会自动删除空格。
字符格式(%c
、%[…]
、%n
)是个例外,它们不会删除空格。
在您的示例中,您必须跳过前导空格,才能完成此更改
scanf("%c", &ch);
至
scanf(" %c", &ch);
^ Note the space
发布于 2017-08-27 08:01:31
使用scanf
,在你点击一个键之后,你需要点击"enter“。这将在输入流中插入两个字符--您按下的字符和换行符\n
(可能还有\r
,即回车符)。
为了进行演示,如果输入"a enter“,则输入流如下所示
a\n
如果您输入"a b c d enter",则输入流如下所示:
abcd\n
循环的第一次迭代将读取您输入的字符,下一次迭代将读取换行符(这不是case
中的字符,因此将命中default
语句。
要读取不带换行符的单个字符,请考虑getchar
,或者只有两个额外的case
,它们捕获换行符和回车符,并且在这两种情况下都不执行任何操作(但请记住,这将“窃取”一些有用的循环迭代)。
发布于 2017-08-27 08:10:52
您必须使用scanf(" %c", &ch);
来消除所有空格,当使用%s时,您不需要空格。
https://stackoverflow.com/questions/45902850
复制相似问题