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

C++十进制二进制互转函数编译错误及char数组问题求助

问题排查与修复

编译错误原因

  • 默认参数重复定义:C++规则要求函数默认参数只能在声明处指定,你在decToBin和binToDec的声明中已经设置了i=0的默认值,函数定义时重复写了int i=0,触发编译报错。
  • break使用位置错误:break语句仅能在循环或switch分支中使用,你在decToBin的递归终止判断中用了break,递归终止应该用return语句。

其他潜在逻辑问题

  • pow函数返回double类型,做大整数计算时会出现精度损失,建议用位运算代替。
  • 二进制字符数组没有手动添加字符串结束符'\0',输出时会出现乱码。
  • 接收十进制输入的变量dec定义为int类型,和函数要求的unsigned long不匹配,数值范围不足。
  • 原decToBin的数值判断条件逻辑有误,会导致高位计算错误。

修复后完整代码

#include <iostream>
#include <cstring>
using namespace std;

// 仅声明处保留默认参数
void decToBin(unsigned long n, int size, char str[], int i = 0);
unsigned long binToDec(char b[], int size, int i = 0);

int main()
{
    unsigned long dec;
    int ch, bits = sizeof(unsigned long) * 8;
    char bin[bits + 1];
    do
    {
        dec = 0;
        memset(bin, '0', bits);
        bin[bits] = '\0'; // 手动添加字符串结束符
        cout << "\n\n\t\tMENU" << endl;
        cout << "1.Decimal to Binary number" << endl;
        cout << "2.Binary to Decimal number" << endl;
        cout << "3.Exit" << endl;
        cout << "Enter your choice(1/2/3): ";
        cin >> ch;
        switch (ch)
        {
        case 1:
            cout << "Enter a Decimal Number: ";
            cin >> dec;
            decToBin(dec, bits, bin);
            cout << dec << " in decimal = " << bin << " in binary" << endl;
            break;
        case 2:
            cout << "Enter a Binary Number: ";
            cin >> bin;
            cout << bin << " in binary = " << binToDec(bin, strlen(bin)) << " in decimal" << endl;
            break;
        case 3:
            break;
        default:
            cout << "Invalid choice" << endl;
        }
    } while (ch != 3);
    return 0;
}

// 定义处去掉默认参数
void decToBin(unsigned long n, int size, char str[], int i)
{
    if (i >= size)
    {
        return; // 递归终止用return代替break
    }
    // 移位运算代替pow避免精度问题
    if (n >= (1UL << (size - i - 1)))
    {
        str[i] = '1';
        n -= (1UL << (size - i - 1));
    }
    else
    {
        str[i] = '0';
    }
    decToBin(n, size, str, i + 1);
}

// 定义处去掉默认参数
unsigned long binToDec(char b[], int size, int i)
{
    if (i >= size)
    {
        return 0;
    }
    // 移位运算代替pow避免精度问题
    return (unsigned long)((b[size - 1 - i] - '0') * (1UL << i) + binToDec(b, size, i + 1));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:24:03