每当我使用if
语句通过使用char
和%d
比较字符来做出决定时,它始终会产生false
。
示例:
#include<stdio.h>
#include<conio.h>
int main(void)
{
int a, b;
float r;
char op;
printf("Enter 1st num : ");
scanf("%d", &a);
printf("Enter 2nd Num : ");
scanf("%d", &b);
printf("Enter Operator ( +, - , * , /) : ");
scanf("%c", &op);
if(op == '+')
{
r = a + b;
printf("Ans = %f", r);
getche();
}
else if (op == '-')
{
r = a - b;
printf("Ans= %f", r);
}
//same as above for remaining 2 functions of * and /
else
printf("Error Occurred");
}
答案 0 :(得分:1)
输入第二个号码后按Enter键,对吗? scanf中的%c
接受它找到的第一个字符,因此它返回与您按Enter键对应的换行符。
一个简单的解决方法是在%c
之前添加空格字符。它使scanf
跳过任何空格。
scanf(" %c",&op);
来自scanf文档(http://www.cplusplus.com/reference/cstdio/scanf/):
空白角色:
该函数将读取并忽略在下一个非空白字符之前遇到的任何空格字符(空格字符包括空格,换行符和制表符 - 请参阅isspace)。格式字符串中的单个空格验证从流中提取的任何数量的空白字符(包括无)。
答案 1 :(得分:1)
因为%d会忽略空格和特殊字符。白色空格和特殊字符是字符。因此,%c必须将空格和特殊字符作为输入。
您可以测试下面代码的输出。
#include <stdio.h>
int main(void)
{
char p = 'w';
char l = 'x';
char t = 't';
printf("Give one, two or three chars: ");
scanf("%c%c%c", &p, &l, &t);
printf("p = %c, l = %c, t = %c \n", p, l, t); //
scanf("%c", &t);
printf("plt = %c%c%c \n", p,l,t);
return 0;
}