cin与char数组交互异常问题求助
问题分析与解决
你的问题核心是混淆了字符的ASCII值和对应的十进制数字值,同时char数组的长度处理也可能引发异常。下面逐个拆解:
问题1:输入后输出字符异常
你定义的是长度为3的char数组,输入"123"时,cin会把字符'1'、'2'、'3'分别存入bin1[0]、bin1[1]、bin1[2]。但C风格字符串要求末尾有'\0'结束符,你的数组长度刚好3,没有多余空间存结束符,这会导致后续输出时出现内存越界的乱码(比如你看到的" 3"而非"13")。
问题2:字符相加得到98而非2
输入"111"后,bin1[1]存储的是字符'1',它的ASCII码值是49,所以49+49=98,这就是你得到98的原因。而直接初始化bin1[1] = 2时,你存的是数字2,相加自然得到4。
解决方法
字符转数字:从cin输入的字符要转换成对应数字,只需减去字符'0'的ASCII值(因为字符'0'到'9'的ASCII是连续的):
char c = '1'; int num = c - '0'; // num的值是1所以计算时应该用
(bin1[1] - '0') + (bin1[1] - '0'),就能得到预期的2。char数组长度留足空间:如果要输入n个字符的字符串,数组长度至少要设为
n+1,用来存储末尾的'\0'结束符,避免内存越界。比如输入"123",数组长度至少要4:char bin1[4] = {0}; // 初始化所有元素为0,自动包含'\0' cin >> bin1;优先用std::string替代char数组:对于初学者来说,
std::string更安全,不需要手动管理内存和结束符,处理字符串操作也更简单:#include <string> std::string bin1; cin >> bin1; int num = bin1[1] - '0'; // 同样转数字
内容的提问来源于stack exchange,提问作者João Santos
相关产品推荐
相关产品推荐

