当我运行这段代码
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int main() {
int Array[100];
cin >> Array;
return 0;
}
我在cin
行收到以下错误消息:
对于二进制表达式('std :: __ 1 :: istream'(aka'basic_istream')和'int *
的无效操作数
为什么我不能直接输入数组?以及如何解决该问题?
答案 0 :(得分:5)
您可以写一个>>
的重载以读取为c样式的数组,然后您的main
将可以正常工作。
template <typename T, std::size_t N>
std::istream & operator>>(std::istream & is, T (&arr)[N])
{
std::copy_n(std::istream_iterator<T>(is), N, arr);
return is;
}
答案 1 :(得分:4)
有关更现代的C ++方法:
#include <algorithm>
然后做
std::for_each(std::begin(Array), std::end(Array), [](auto& elem) { cin >> elem; });
或者您可以将其用作运算符>>重载
#include <iostream>
#include <algorithm>
template<typename T, size_t Size>
std::istream& operator>>(std::istream& in, T (&arr)[Size])
{
std::for_each(std::begin(arr), std::end(arr), [&in](auto& elem) {
in >> elem;
});
return in;
}
int main() {
int Array[100] = { 0 };
std::cin >> Array;
return 0;
}
答案 2 :(得分:3)
您应该循环数组元素:
for(int i=0; i<100; i++){
cout<<"Insert element "<<i<<": ";
cin>>Array[i];
}
但是,尽量不要对变量使用大写名称,因为它们通常用于命名对象/类和其他东西
答案 3 :(得分:2)
您应该使用循环逐个输入num
#include <iostream>
int main() {
int Array[100];
std::cout<<"enter Numbers Here:"<<endl;
for (int i=0; i<100; i++)
std::cin>>Array[i];
return 0;
}
答案 4 :(得分:2)
您需要遍历每个数组元素以获取值,因此应使用迭代器或循环(for,while或do while)。没有直接的方法可以获取整个数组的值。
让我尝试进一步解释一下,数组只是一个连续的内存,可以容纳许多已定义类型的元素。没有办法知道在运行时需要存储的元素数量,或者简单地说,没有办法知道数组有多大,可以包含多少个元素。这就是数组溢出是一个非常普遍的问题的原因,因为数组没有结尾定界符,并且使用数组指针可以尽可能地长。希望这可以帮助您更好地理解。
答案 5 :(得分:1)
在不重载cin
运算符的情况下,无法>>
数组。但是,您可以按照以下方式声明它
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int main() {
const int size = 100;
int array[size];
for (int i = 0; i < size; i++) {
cout << "Enter number #" << i+1 << ": ";
cin >> array[i];
}
return 0;
}