C语言算术运算代码问题:输入变量b始终默认显示为0
问题分析与解决方法
问题根源
代码中读取运算符的语句scanf("%s", &c)存在致命错误:
%s是C语言用于读取字符串的格式符,它会自动在输入字符后追加字符串终止符\0并写入内存。但c是单个char类型变量,仅能存储1个字符,写入\0时会发生内存溢出,直接覆盖相邻变量b的内存空间,导致b的值被强制改为0。
修正方案
将读取运算符的语句替换为:
scanf(" %c", &c);
修正说明
- 使用
%c格式符匹配单个char类型变量,完全符合读取单个运算符的需求; - 在
%c前添加空格,是为了跳过输入缓冲区中残留的换行符(之前输入整数后按下回车留下的),避免误将换行符当作运算符读取。
修正后的完整代码
#include <stdio.h> int main() { int a,b; printf("Enter the I no. : "); scanf("%d",&a); printf("Enter the II no. : "); scanf("%d",&b); char c; printf("Enter the Operation : "); scanf(" %c", &c); switch (c) { case '+': printf("Addition of %d and %d = %d",a,b,a+b); break; case '-': printf("Subtraction of %d and %d = %d",a,b,a-b); break; case '*': printf("Multiplication of %d and %d = %d",a,b,a*b); break; case '/': printf("Division of %d and %d = %d",a,b,a/b); break; } return 0; // 补充main函数返回值,符合C语言标准规范 }
内容的提问来源于stack exchange,提问作者Vishal Kumar Yadav
相关产品推荐
相关产品推荐

