【问题标题】:How do I use cin for an array如何将 cin 用于数组
【发布时间】:2018-09-18 10:19:47
【问题描述】:

当我运行这段代码时

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

的操作数无效

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

【问题讨论】:

  • 使用 for 循环。
  • 使用循环在每次迭代中读取一个元素,直到读取所需的数字。或者使用流迭代器,并将所需数量的元素从中复制到数组中。
  • std::copy_n(std::istream_iterator&lt;int&gt;(std::cin), 100, Array);
  • @Blastfurnace 在 cmets 中不回答
  • 我建议你修改关于在你正在学习的任何文本中使用数组的章节。

标签: c++


【解决方案1】:

对于更现代的 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】:

    可以编写&gt;&gt; 的重载以读入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;
    }
    

    【讨论】:

      【解决方案3】:

      你应该循环数组元素:

      for(int i=0; i<100; i++){
        cout<<"Insert element "<<i<<": ";
        cin>>Array[i];
      }
      

      但是,尽量不要为变量使用大写名称,因为它们通常用于命名对象/类和其他事物

      【讨论】:

        【解决方案4】:

        您需要遍历每个数组元素以获取值,因此您应该使用迭代器或循环(for、while 或 do while)。没有直接的方法来获取整个数组值。

        让我试着再解释一下,数组只是一个连续的内存,可以保存许多定义类型的元素。无法知道运行时需要存储的元素数量,或者简单来说,无法知道数组有多大,它可以包含多少元素。这就是数组溢出是非常常见的问题的原因,因为数组没有结束分隔符,并且使用数组指针可以尽可能长地进行。希望这能帮助您更好地理解。

        【讨论】:

          【解决方案5】:

          你应该使用循环输入 num by 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;
          }
          

          【讨论】:

            【解决方案6】:

            如果不重载&gt;&gt; 运算符,就无法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;
            }
            

            【讨论】:

              猜你喜欢
              • 2015-06-11
              • 2018-06-24
              • 1970-01-01
              • 1970-01-01
              • 2019-04-29
              • 1970-01-01
              • 2022-01-17
              • 2012-01-10
              • 1970-01-01
              相关资源
              最近更新 更多