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

C语言编写计算器无编译警告但输入add/mul等指令不生效问题

问题原因分析
  • 类型与输入格式不匹配:你将mfunc定义为int整型,同时用%d格式符读取整数输入,但实际要接收的是add/mul这类字符串,读取操作直接失败,mfunc最终为未定义的垃圾值,所有判断条件都无法触发,直接进入else分支返回错误提示。
  • 字符串比较逻辑错误:C语言中不能直接用==判断两个字符串的内容是否相等,==只会对比两个字符串的首内存地址,要对比内容必须调用<string.h>头文件中的strcmp()函数,函数返回值为0时代表两个字符串内容完全一致。
  • 错误的操作符修改尝试:将==替换为=属于赋值操作,会直接将字符串常量的内存地址赋值给int类型变量,完全偏离匹配逻辑,反而会引入更多问题。
修正后的可运行代码
#include <stdio.h>
#include <stdlib.h>
// 新增字符串处理头文件
#include <string.h>

int main()
{
    int num1;
    int num2;
    // 将mfunc修改为字符数组,用来存储用户输入的字符串
    char mfunc[16];

    printf("type in a mathematical function: add, sub, div or mul ");
    // 用%s格式符读取字符串,scanf_s读字符串需要传入缓冲区长度
    scanf_s("%s", mfunc, sizeof(mfunc));

    if (strcmp(mfunc, "add") == 0) {
        printf("enter first number: ");
        scanf_s("%d", &num1);
        printf("enter a second number: ");
        scanf_s("%d", &num2);
        printf("sum of two number is: %d", num1 + num2);
    }
    else if (strcmp(mfunc, "sub") == 0) {
        printf("enter first number: ");
        scanf_s("%d", &num1);
        printf("enter a second number: ");
        scanf_s("%d", &num2);
        printf("difference is: %d", num1 - num2);
    }
    else if (strcmp(mfunc, "div") == 0) {
        printf("enter first number: ");
        scanf_s("%d", &num1);
        printf("enter a second number: ");
        scanf_s("%d", &num2);
        // 新增除数为0判断,避免程序崩溃
        if(num2 == 0) {
            printf("divisor cannot be 0");
        } else {
            printf("quotent is: %d\n", num1 / num2);
        }
    }
    else if (strcmp(mfunc, "mul") == 0) {
        printf("enter first number: ");
        scanf_s("%d", &num1);
        printf("enter a second number: ");
        scanf_s("%d", &num2);
        printf("product is: %d", num1 * num2);
    }
    else {
        printf("type a given mathematical function");
    }

    return 0;
}
补充优化提示
  • 原有输入提示写的是subtract、divide、multiply,和判断条件里的sub、div、mul不匹配,已在修正代码中调整了提示内容,你也可以根据需求修改判断条件的字符串匹配规则。
  • 目前除法用的是整数除法,只会输出整数结果,如果需要保留小数,可以将num1、num2改为float类型,输出格式符换成%f。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:24:03