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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:10:39