C语言简易计算器中number1赋值后输出始终为0的问题排查
问题分析:输入的第一个整数输出显示为0的原因
你的代码里number1被莫名覆盖成0的核心问题出在读取运算符的那行代码,具体原因如下:
operation是单个char类型变量,仅占用1字节内存空间。- 你用了
scanf("%s", &operation)来读取运算符,但%s是用来读取字符串的格式符——它会把输入的字符(比如+)自动加上字符串结束符\0一起写入内存。 - 这就导致了缓冲区溢出:
operation只有1字节,装不下'+'和'\0'两个字节,多出来的'\0'会写入相邻的内存区域。而根据编译器的栈内存布局,number1的内存刚好和operation相邻,于是'\0'(ASCII值为0)直接覆盖了number1原本存储的32,最终输出时number1就变成了0。
修复方案
直接改用%c格式符读取单个字符,同时注意跳过之前输入留下的换行符(在%c前加空格):
printf("\nPlease enter the operation: "); scanf(" %c", &operation); // 空格用于跳过输入缓冲区里的换行符,%c读取单个字符
如果非要用%s读取,也可以把operation定义为字符数组(至少2字节,容纳字符和结束符):
char operation[2]; // ... scanf("%s", operation);
修改后重新运行,输入32、+、66,number1就能正常保留输入的32,输出结果也会正确。
内容的提问来源于stack exchange,提问作者user20858780
相关产品推荐
相关产品推荐

