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
相关产品推荐
相关产品推荐

