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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:03:34