从c ++中读取文件中的整数

时间:2015-03-03 18:18:50

标签: c++

我有一个名为 in.txt 的文本文件,每行都有一个整数。第一行包含行数减1(=整数)。我想把这个整数读成数组。所以我写了下面的程序:

#include <iostream>
#include <fstream>
int main(int argc, char * argv[])
{
    std::fstream myfile("in.txt");

    int number;
    int counter=0;
    myfile >> number;
    int inputArray[number];

    for(counter=0;counter=number;counter++)
    {
        myfile>>inputArray[counter];
    }

    for(counter=0;counter=number;counter++){
        printf("%i",inputArray[counter]);
    }
    return 0;
}

Q1:当我运行它时,没有任何反应!出现黑屏并保持空白。有什么问题?

Q2:如果输入文件非常大(包含大约2 ^ 27个整数),这个程序是个好主意,还是我必须做其他事情?

3 个答案:

答案 0 :(得分:4)

您的代码有几个问题:

首先,您无法检查输入操作是否成功。做点什么

if (! (myfile >> number)) {
       std::cerr << "Reading number failed!\n";
       return -1;
}

用于每个输入操作。否则,您可能会使用垃圾值,这可能会导致奇怪且很难找到错误。

接下来,C ++中没有可变大小的数组,而是使用std::vector<int> inputArray(number);。这会将整个数组初始化为0,这可能需要一些时间,您可以将代码更改为

std::vector<int> inputArray;
inputArray.reserve(number);
for(int64_t counter=0;counter<number;counter++)
{
    int temp;
    myfile>>temp;
    inputArray.push_back(temp);
}

避免这种情况。

最后,您的循环条件错误。他们应该是

for(counter=0;counter<number;counter++)

如果数字的数量可能很大,您应该使用固定大小的整数,例如int64_t,而不是number

这是一个好主意吗?嗯,这是一种读取数字的有效方法,但读取2 ^ 27个数字总是需要花费很多时间。如果你能避免这样做,那么这是你加快速度的最大机会。

作为最后一点,以下是我将如何编写带错误处理的输入操作以及所有:

for (int temp; myFile >> temp;)
    inputArray.push_back(temp);

if( inputArray.size() != number) 
    std::cerr << "Number of numbers read did not match number in first line!\n";

答案 1 :(得分:2)

看起来这一行有一个拼写错误:

for(counter=0;counter=number;counter++)

应该是:

for(counter=0; counter < number; counter++)

您在下一个for循环中遇到同样的错误。

答案 2 :(得分:1)

  1. 1。您必须创建一个动态数组,以便在执行程序时选择它的大小
    1. 逻辑运算符中的错误
    2. 在声明我的文件时,最好放置您想要输入或输出文件的天气
  2. 试试这个:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main(int argc, char * argv[])
    {
        std::fstream myfile("in.txt", ios::in | ios::out);
    
        int number;
        int counter = 0;
        myfile >> number;
        int *inputArray = new int[number];
    
        for (counter = 0; counter != number; counter++){
            myfile >> inputArray[counter];
        }
    
        for (counter = 0; counter != number; counter++){
            printf("%i", inputArray[counter]);
        }
        delete[] inputArray;
        return 0;
    }
    

    我认为二进制文件对于大量数据更好。