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

C++使用switch语句实现十进制转≥10进制代码错误排查咨询

问题修复说明

核心问题原因

  1. 类型不匹配导致输出异常:大于9的进制分支中,你将字符(如'A'/'C')的ASCII值存入int类型的result数组,直接输出int值时会打印ASCII码的数字形式;同时余数小于10时你直接存储的是数值本身(如8),而非字符'8'对应的ASCII码,两类值拼接输出后就得到了你遇到的错误结果678('C'的ASCII值为67,数值8直接输出为8,拼接后即为678)。
  2. switch语句逻辑缺陷:case 15分支遗漏了break关键字,余数为15时会出现潜在逻辑错误。
  3. 非标准语法兼容问题:代码中使用的可变长度数组int result[cnt]不属于C++标准语法,仅部分编译器支持扩展实现,跨平台运行可能出错。

修复方案

修改点说明

  • 将字符转换逻辑移到输出阶段执行,避免ASCII值存入int数组导致的输出异常,小于10的数值直接输出数字即可,无需额外转换
  • 补全switch的case 15分支的break语句,消除逻辑隐患
  • 替换可变长度数组为标准动态数组实现,兼容所有C++编译器
  • 新增动态数组内存释放逻辑,避免内存泄漏

修复后完整代码

#include <iostream>
using namespace std;

int main(){
    int x,y,yCopy,r,cnt=0;
    cout << "Select a base for your number from 2 to 16 : ";
    cin >> x;
    cout << "Enter a decimal number in order to transform it to the selected base : " << endl;
    cin >> y;
    yCopy=y;

    // 计算转换后的结果位数
    do{
        yCopy=yCopy/x;
        cnt++;
    }while(yCopy!=0);
    yCopy=y;

    // 标准动态数组实现,替代非标准可变长度数组
    int* result = new int[cnt];

    if(x>1 && x<10){
        for(int i=cnt-1; i>=0;--i){
            r=yCopy%x;
            result[i]=r;
            yCopy=yCopy/x;
        }

        cout << y << "(10) = ";
        for(int i=0;i<cnt;++i){
            cout << result[i];
        }
        cout << "(" << x <<  ")" << endl;
    }

    if(x>9 && x<17){
        for(int i=cnt-1; i>=0;--i){
            r=yCopy%x;
            result[i]=r;
            yCopy=yCopy/x;
        }

        cout << y << "(10) = ";
        for(int i=0;i<cnt;++i){
            int val = result[i];
            switch(val){
                case 10 : cout << 'A'; break;
                case 11 : cout << 'B'; break;
                case 12 : cout << 'C'; break;
                case 13 : cout << 'D'; break;
                case 14 : cout << 'E'; break;
                case 15 : cout << 'F'; break; // 补全break
                default: cout << val; // 小于10直接输出数字
            }
        }
        cout << "(" << x <<  ")" << endl;
    }

    // 释放动态申请的内存
    delete[] result;
    return 0;
}

测试验证

输入进制16,十进制数200,运行后输出:200(10) = C8(16),符合预期结果。

内容的提问来源于stack exchange,提问作者Valzio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:54:03