Cin正在为char数组工作,但不适用于int数组

时间:2017-04-21 06:00:31

标签: c++ arrays

所以我使用cin来获取char数组的输入。

char mycroft[2];
    cin>>mycroft;
    cout<<mycroft;

工作正常。现在我使用cin来获取int数组的输入:

 int mycroft[2];
    cin>>mycroft;
    cout<<mycroft;

但是,我收到了这个我不明白的错误:

  

错误:'运营商&gt;&gt;'不匹配(操作数类型是'std :: istream {aka std :: basic_istream}'和'int [2]')|

有人可以告诉我为什么它不起作用?我的教授也说使用cin输入是不可取的。这到底有多大?

3 个答案:

答案 0 :(得分:0)

您可能需要:

for(i=0; i<2; i++) 
{
   cin>>mycroft[i];
 ...
}

答案 1 :(得分:0)

您误解了char数组和int(及其他)数组的概念。

当您创建char variable[x]时,您在内存中保留了x * 8位(char的长度),并且该语言将其视为连续空格。 要完成此链,您需要输入结束字符'\0'char mycroft[2]有1个可用char(理论上),内存中有16位(2 * 8位)空间。

另一方面,当您创建int variable[x]时,您在内存中保留空间为x * 32位(int的长度),尽管系统连续分配,但语言对待每一个单独x个元素。 简而言之,将其视为真正的阵列。 int mycroft[2]有2个可用元素,在内存中占用64位(2 * 32位)空间。

因为cin可以直接使用charcin >> mycroftcout << mycroft)并且无法使用其他数组(在您的情况下int cin >> mycroft[position] 1}})您需要单独访问它们(cout << mycroft[position]--role roleName)。

答案 2 :(得分:0)

因为字符数组可以表示它是C风格的字符串(如果是零终止的,即数组中的最后一个元素为零)。 std::coutstd::cin以这种方式对待他们。

char[]可以初始化为:

char mycroft[] = "Hello, World!";

无法以这种方式初始化int[],它是一个整数数组。您的教授之所以告诉您使用std::cin进行输入是不可取的,原因是如果您以错误的方式使用它会导致溢出。在您的第一个示例中,std::cin会将输入中的所有内容写入两个元素的长数组,导致char mycroft[2]之后的内存将被覆盖。