CIN正在为char阵列工作,但不为int阵列工作

Cin is working for char array but not for int array

本文关键字:工作 阵列 int char CIN      更新时间:2023-10-16

因此,我正在使用cin用于Char数组的输入。

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

它可以正常工作。现在,我正在使用 cin进行int数组的输入:

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

但是,我遇到了我不明白的错误:

错误:"操作员>>"没有匹配(操作数类型为'std :: istream {aka std :: basic_istream}'and'int [2]'(|

有人可以告诉我为什么它不起作用吗?我的教授还说,不建议使用cin进行输入。那是真的吗?

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

创建char variable[x]时,您将存储空间保留到x * 8位(char的长度(,语言将其视为连续空间。要完成此链,您需要将最终字符''放置。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 >> mycroftcout << mycroft(一起使用,并且不起作用,并且与其他数组(在您的情况下int(无效,您需要单独访问它们(cin >> mycroft[position]cout << mycroft[position](。

您可能需要:

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

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

char[]可以初始化为:

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

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