我如何将cin用于阵列

时间:2018-09-18 10:19:47

标签: c++

当我运行这段代码

#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 *

的无效操作数

为什么我不能直接输入数组?以及如何解决该问题?

6 个答案:

答案 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;
}