C++ 使用模板对 .txt 文件进行排序

C++ Sorting .txt files using a template

我正在尝试编写一个程序,它接受 3 个输入 .txt 文件,使用模板对文件进行排序,并将排序后的数据写入 3 个输出文件。我尝试排序的 3 个输入 .txt 文件是 IntFile.txt、FloatFile.txt 和 QUOTES.txt。文件中存储的数据类型分别为整数、双精度数和字符串。现在我正试图让 IntFile.txt 进行排序,但在读取 .txt 文件并将其保存到数组以发送到我的模板进行排序时遇到了问题。一旦从文件中读取最后一个数据,我就无法找到停止 for 循环的方法。到目前为止我写的程序是

`#include <iostream>
 #include <fstream>
 #include <iomanip>
 #include <string>
 #include <cstdlib>
 #include "sorting.h"
 using namespace std;

 int main()
 {

    ifstream inNumbers("IntFile.txt");
    ifstream inFloaters("FloatFile.txt");
    ifstream inWords("QUOTES.txt");
    ofstream outNumbers("SortedInt.txt");
    ofstream outFloaters("SortedFloat.txt");
    ofstream outWords("SortedQuotes.txt");

    int i, length = 0;
    int data[100];

    if (!inNumbers)
    {
        cerr << "IntFile.txt file could not be opened" << endl;
        exit(1);
    }

    if (!inFloaters)
    {
        cerr << "FloatFile.txt file could not be opened" << endl;
        exit(1);
    }

    if (!inWords)
    {
        cerr << "QUOTES.txt file could not be opened" << endl;
        exit(1);
    }

    for (i = 0; data[i] ; ++i)
    {
        inNumbers >> data[i];
        length += 1;
    }

    sorting(data[100], length);

 }`

数字在 IntFile.txt 中的显示方式:

55 67 458 23 81 33
782 375 528
405 324 950 46
14 864 551 38 167 518 630

这个方块不对。

for (i = 0; data[i] ; ++i)
{
    inNumbers >> data[i];
    length += 1;
}

您尚未初始化 data,但您正在 for 循环中使用其成员的值。

您需要的是符合以下逻辑的东西:

for (i = 0; i < 100 && inNumbers; ++i)
{
    inNumbers >> data[i];
    if ( inNumbers )
    {
       length += 1;
    }
}