所以我使用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
输入是不可取的。这到底有多大?
答案 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
可以直接使用char
(cin >> mycroft
和cout << mycroft
)并且无法使用其他数组(在您的情况下int
cin >> mycroft[position]
1}})您需要单独访问它们(cout << mycroft[position]
和--role roleName
)。
答案 2 :(得分:0)
因为字符数组可以表示它是C风格的字符串(如果是零终止的,即数组中的最后一个元素为零)。 std::cout
和std::cin
以这种方式对待他们。
char[]
可以初始化为:
char mycroft[] = "Hello, World!";
无法以这种方式初始化int[]
,它是一个整数数组。您的教授之所以告诉您使用std::cin
进行输入是不可取的,原因是如果您以错误的方式使用它会导致溢出。在您的第一个示例中,std::cin
会将输入中的所有内容写入两个元素的长数组,导致char mycroft[2]
之后的内存将被覆盖。