C++代码无法统计输入数字中零的数量,求问题排查
问题分析与修正方案
嘿,我一眼就瞅到你代码里零计数不对的核心问题了,咱们慢慢拆解,顺便把其他小细节也优化下~
核心错误:字符与整数的混淆
你代码里判断零的条件是:
if (arrToGuess[a] == 0)
但这里的arrToGuess[a]是字符类型,字符'0'对应的ASCII码值是48,而不是整数0(整数0对应的是空字符\0)。这个条件永远不会成立,所以zero变量一直是0,自然输出不对。
次要问题:依赖ASCII码的奇偶判断
虽然你对非零字符的奇偶判断看起来能运行(比如'1'的ASCII是49,49%2=1,确实是奇数),但本质上你是在对ASCII码值做运算,不是对数字本身。这种写法依赖ASCII码的顺序,虽然数字字符的ASCII是连续的,但换成其他字符就会出错,不如直接把字符转换成对应的整数更稳妥。
修正后的完整代码
我帮你调整了代码逻辑,去掉了不必要的数组,优化了判断逻辑:
#include <iostream> #include <string> using namespace std; int main() { string stringToGuess; cout << "Hello user would you please enter a long number." << endl; cin >> stringToGuess; int arrLength = stringToGuess.length(); int odd = 0; int even = 0; int zero = 0; // 直接遍历string,无需额外复制到char数组 for (int a = 0; a < arrLength; a++){ char currentChar = stringToGuess[a]; // 正确判断字符'0' if (currentChar == '0') { zero++; cout << "ZERO "; } else { // 把字符转换成对应的整数:利用数字字符ASCII连续的特性 int num = currentChar - '0'; if (num % 2 == 0) { even++; cout << "Even "; } else { odd++; cout << "Odd "; } } } cout << "\nOdd Numbers = " << odd << endl; cout << "Even Numbers = " << even << endl; cout << "Zeros = " << zero << endl; cout << "Total = " << arrLength << " Numbers" << endl; return 0; }
关键修改点说明
- 修正零的判断条件:用
currentChar == '0'替代==0,准确匹配字符'0' - 字符转数字:通过
currentChar - '0'把字符转换成对应的整数,逻辑更清晰,避免依赖ASCII码的巧合 - 移除冗余数组:
string本身支持索引访问,不需要额外复制到char数组里 - 调整计数逻辑:去掉了
even - zero的操作,现在even只统计非零的偶数,zero单独统计,结果更准确
这样运行后,零的计数就能正确输出啦~
内容的提问来源于stack exchange,提问作者john smith
相关产品推荐
相关产品推荐

