C语言乘除运算函数输出异常:乘法结果为0.00的错误排查与修复
C语言代码错误分析与修复
输入x=4、y=5、z=*时输出0.00,代码存在以下错误及修复方案:
运算符输入的scanf格式错误:
原代码用scanf("%s", &z);读取单个字符运算符,但%s是字符串读取格式符,会将输入字符(如*)和字符串结束符\0一起写入内存。而z是单个char变量,仅占1字节内存,写入\0会越界覆盖相邻变量(如y)的内存值,导致y被改为0,最终计算4*0得到0.00。
修复:改用%c格式符读取单个字符,同时为跳过之前输入整数后留在缓冲区的换行符,在%c前加空格,即scanf(" %c", &z);。除法运算的整数除法问题:
原代码result1函数中的x/y是整数除法,当x、y为整数时会直接舍去小数部分(如5/2得到2而非2.5),不符合返回float类型结果的需求。
修复:对其中一个操作数进行强制类型转换,将整数运算转为浮点运算,比如float r1 = (float)x / y;。非指定运算符的返回值不符合需求:
需求要求非指定运算符返回0,但原代码else分支仅打印错误信息,未输出0.00的结果。
修复:else分支改为printf("the result is %.2f\n", 0.0f);。
修复后的完整代码:
#include <stdio.h> float result(int x, int y); float result1(int x, int y); int main() { int x, y; char z; printf("enter x:\n"); scanf("%d", &x); printf("enter y:\n"); scanf("%d", &y); printf("enter z:\n"); scanf(" %c", &z); if (z == '*') { printf("the result is %.2f\n", result(x, y)); } else if (z == '/') { printf("the result is %.2f\n", result1(x, y)); } else { printf("the result is %.2f\n", 0.0f); } return 0; } float result(int x, int y) { float r = x * y; return r; } float result1(int x, int y) { float r1 = (float)x / y; return r1; }
内容的提问来源于stack exchange,提问作者Kazi Sayeeba
相关产品推荐
相关产品推荐

