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

C++嵌套调用成员函数实现二进制翻转运行异常问题求助

问题原因
  • 核心错误在change()函数的字符比较逻辑:string存储的每个元素是ASCII字符,字符'0'对应的ASCII码为48、'1'为49,你直接和数字0、1(对应ASCII控制字符,不可打印)比较完全不匹配。原有逻辑中所有输入的'0'、'1'都会进入else分支被赋值为数字0(空字符),因此打印时无任何输出。
  • 次要问题:chk_bin()校验到非法二进制字符时仅打印提示,不会终止程序,非法输入仍会执行后续逻辑。
修复方案
  1. 调整change()函数的判断、赋值逻辑,将数字常量替换为字符常量'0'、'1'
  2. 优化chk_bin()逻辑,校验到非法字符后直接终止程序,避免无效执行
修正后完整代码
#include <iostream>
#include <string>
#include <cstdlib> // 引入exit函数头文件
using namespace std;

// 校验二进制数并翻转0和1的程序
class binarychange{
   string s;
   public:
       void read(void);
       void chk_bin(void);
       void change(void);
       void display(void);
};

void binarychange :: read(void){
    cout<<"enter a binary number"<<endl;
    cin>>s;
}

void binarychange :: chk_bin(void){
    for (int i = 0; i < s.length(); i++)
    {
        if(s.at(i)!='0' && s.at(i)!='1'){
            cout<<"Invalid binary format"<<endl;
            exit(EXIT_FAILURE); // 校验失败直接退出
        }
    }  
}

void binarychange :: change(void){
    for (int i = 0; i < s.length(); i++)
    {
       if (s.at(i) == '0')
       {
           s.at(i) = '1';
       }
       else
       {
           s.at(i) = '0';
       }
    }
}

void binarychange :: display(void){
    cout<<"Displaying your binary number"<<endl;
    for (int i = 0; i < s.length(); i++)
    {
        cout<<s.at(i);
    }
    cout<<endl;
}

int main(){
   binarychange b;
   b.read();
   b.chk_bin();
   b.display();
   b.change();
   b.display();
   return 0;
}

修改后输入101会依次输出原数101、翻转后的结果010,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:54:03