如何拆分文件?

How can I split a file?

我正在尝试拆分文件的代码

#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;

int main()
{
int dim,k=1;
double x,y,x1,y1;
vector<double> AUX1[0],AUX2[0];
string file="ne_1417.dat",number; 
ifstream IN(file);
while(IN >> x >> y)
{
    AUX1.push_back(x);
    AUX2.push_back(y);
}
IN.close(); 
dim=AUX1.size();
number=to_string(k);
ofstream OUT(number+file);
for(int i=0;i<dim;i++)
{
    OUT<<AUX1[i]<<" "<<AUX2[i]<<endl;   
    if((AUX1[i+1]-AUX1[i])>50.){
         k++;
        number=to_string(k);
        OUT.close();        
        ofstream OUT(number+file);
    }
}

return 0;
}

我得到了我想要的文件数量,但只有第一个文件是完整的数据,其他的都是空的,我不明白为什么=( 我需要帮助,请 <3

问题是作用域和变量阴影的问题。

您在函数范围内有一个名为 OUT 的变量,它在写入循环之前定义。然后在 if 中定义一个 new 和完全不同的变量 OUT 。当块的范围结束时,新变量的生命周期也结束,并且它被破坏。

您不应该定义新变量,而是重新打开现有文件:

if((AUX1[i+1]-AUX1[i])>50.){
     k++;
    number=to_string(k);
    OUT.close();        
    OUT.open(number+file);  // Open the new file
}

所有大型编译器都应该能够检测到变量阴影并发出警告。如果您没有收到这样的警告,那么您需要启用更多警告(我建议 -Wall -Wextra -Wpedantic 用于 GCC 和 Clang,/W4 用于 VC++)。