奇怪的数组从C ++文件中读取

时间:2017-06-14 14:20:56

标签: c++ arrays input char

我试图在1.000.001中初始化一个C++元素数组,如下所示:int array[1000001]。我有4GB的RAM,所以我猜测问题是我的笔记本电脑因为4 * 1000001 bytes大小而无法容纳这么大的阵列。所以我决定试着把它char(因为我想知道我的猜测是否正确)。我正在从一个文件中读取数组。这是我的代码:

#include <iostream>
#include <fstream>
#include <climits>

using namespace std;


int main()
{
    fstream in("C:\\Users\\HP\\Documents\\Visual Studio 2017\\Projects\\inputFile.in");
    if (!in)
    {
        cerr << "Can't open input file\n";
        return 1;
    }
    fstream out("outputFile.out", fstream::out);
    if (!out)
    {
        cerr << "Can't open output file\n";
        return 1;
    }

    int n;
    in >> n;
    int i;
    char array[100];
    for (i = 0; i < n; i++)
        in >> array[i];

    in.close();
    out.close();
}

输入:
5 45 5 4 3 12
我的数组是{4, 5, 5, 4, 3}

输入: 5 12 3 4 5 45
我的数组是{1, 2, 3, 4, 5}

现在我真的很困惑。为什么会这样?

1 个答案:

答案 0 :(得分:4)

在本声明中

in >> array[i];

使用了运算符

template<class charT, class traits>
basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>&, charT&);

其中模板参数charT替换模板类型参数char

操作员从流中跳过空格字符读取一个字符。

因为流包含以下字符序列

45 5 4 3 12

然后对于操作员的五次调用,将读取以下字符

4, 5, 5, 4, 3

将跳过空格字符。

您可以将流读取为具有整数,例如

for (i = 0; i < n; i++)
{
    int value;
    in >> value;
    array[i] = value;
}

对于大整数数组的问题,当你应该声明它具有静态存储持续时间时,例如在任何函数之外声明它。或者您可以使用标准类std::vector而不是数组。