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

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。

解决方法

  1. 字符转数字:从cin输入的字符要转换成对应数字,只需减去字符'0'的ASCII值(因为字符'0'到'9'的ASCII是连续的):

    char c = '1';
    int num = c - '0'; // num的值是1
    

    所以计算时应该用(bin1[1] - '0') + (bin1[1] - '0'),就能得到预期的2。

  2. char数组长度留足空间:如果要输入n个字符的字符串,数组长度至少要设为n+1,用来存储末尾的'\0'结束符,避免内存越界。比如输入"123",数组长度至少要4:

    char bin1[4] = {0}; // 初始化所有元素为0,自动包含'\0'
    cin >> bin1;
    
  3. 优先用std::string替代char数组:对于初学者来说,std::string更安全,不需要手动管理内存和结束符,处理字符串操作也更简单:

    #include <string>
    std::string bin1;
    cin >> bin1;
    int num = bin1[1] - '0'; // 同样转数字
    

内容的提问来源于stack exchange,提问作者João Santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:01:24