使用C语言中的else使用Char

时间:2015-07-07 06:59:50

标签: c if-statement

每当我使用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");
}

2 个答案:

答案 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; 
}