C++嵌套调用成员函数实现二进制翻转运行异常问题求助
问题原因
- 核心错误在
change()函数的字符比较逻辑:string存储的每个元素是ASCII字符,字符'0'对应的ASCII码为48、'1'为49,你直接和数字0、1(对应ASCII控制字符,不可打印)比较完全不匹配。原有逻辑中所有输入的'0'、'1'都会进入else分支被赋值为数字0(空字符),因此打印时无任何输出。 - 次要问题:
chk_bin()校验到非法二进制字符时仅打印提示,不会终止程序,非法输入仍会执行后续逻辑。
修复方案
- 调整
change()函数的判断、赋值逻辑,将数字常量替换为字符常量'0'、'1' - 优化
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
相关产品推荐
相关产品推荐

