正在用c++从文件中读取整数

Reading integer from a file in c++

本文关键字:读取 整数 文件 c++      更新时间:2023-10-16

我在.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个整数),这个程序是个好主意,还是我必须做其他事情?

您的代码有几个问题:

首先,您无法检查您的输入操作是否成功。做一些类似的事情

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

这是个好主意吗

作为最后一句话,以下是我将如何编写带有错误处理和所有内容的输入操作:

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";

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

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

应该是:

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

您在下一个for循环中也出现了同样的错误。

  1. 1.您必须创建一个动态数组,才能在执行程序时选择其大小
    1. 逻辑运算符出错
    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;
}

我认为二进制文件更适合大量的数据。