CIN正在为char阵列工作,但不为int阵列工作
Cin is working for char array but not for int array
因此,我正在使用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 >> mycroft
和cout << mycroft
(一起使用,并且不起作用,并且与其他数组(在您的情况下int
(无效,您需要单独访问它们(cin >> mycroft[position]
和cout << mycroft[position]
(。
您可能需要:
for(i=0; i<2; i++)
{
cin>>mycroft[i];
...
}
,因为字符数组可以表示它是一个C风格的字符串(如果零终端,即数组中的最后一个元素为零(。std::cout
和std::cin
以这种方式对待它们。
char[]
可以初始化为:
char mycroft[] = "Hello, World!";
不能以这种方式初始化int[]
,它是整数数组。您的教授告诉您,不建议使用std::cin
进行输入的原因是,如果您以错误的方式使用它可能会导致溢出。在您的第一个示例中,std::cin
将写入从输入到两个元素长数组的所有内容,导致内存跟随char mycroft[2]
。
- QSqlquery prepare()和bindvalue()不工作
- OpenMP阵列性能较差
- 导入库可以跨dll版本工作吗
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 当我的阵列太大时出现分段错误
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- CIN正在为char阵列工作,但不为int阵列工作
- SIMD -> uint16_t 阵列到浮点数阵列在浮点数上工作,然后返回到uint16_t
- 此阵列拷贝如何工作
- 阵列实际上是如何工作的
- 怪物阵列没有按我需要的方式工作