You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中判断char类型运算符的if语句不生效是什么原因?

问题原因
  • 变量类型匹配错误:你定义的operator是char operator[1]字符数组类型,数组名在参与运算时默认退化为指向数组首地址的指针。if(operator =='+')这行代码实际是把数组的内存地址和字符常量'+'的ASCII值(43)做对比,二者永远不可能相等,因此判断分支永远无法触发。
  • 你看到printf("You wrote %s\n", operator);输出正常属于巧合:%s格式化符要求传入字符指针,你的数组名刚好符合参数要求,但因为你只分配了1字节的数组空间,存储输入的'+'后没有多余位置存储字符串结束符'\0',这行printf本身属于未定义行为,只是运行时刚好数组后续内存的值为0,才没有出现乱码输出。
修复方案

两种方案选一种即可:

方案1:将operator改为普通char类型(更推荐)

修改代码如下:

float number1;
float number2;
float total;
// 改为char类型,不是数组
char operator;
printf("Welcome to the calculator\n");
while(1) // 等价于3>2,写法更规范
{
    printf("Pick a number\n");
    scanf("%f", &number1);
    
    printf("Que quieres hacer?\n");
    scanf(" %c", &operator);
    // 用%c输出单个字符,更安全
    printf("You wrote %c\n", operator);
    
    if(operator =='+')
    {
        printf("This works!");
    }
}

方案2:保留数组类型,判断时取数组首个元素

如果要保留数组定义,修改if判断条件即可:

// 取数组第一个元素和'+'比较
if(operator[0] == '+')
{
    printf("This works!");
}

内容的提问来源于stack exchange,提问作者Explosivo30

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:48:04