C++ Can';无法从.txt文件中获取最后一个int

C++ Can';无法从.txt文件中获取最后一个int,c++,text-files,ifstream,eof,C++,Text Files,Ifstream,Eof,我的问题是从文本文件中读取整数,将它们保存到数组中,然后将数组复制到新的.txt文件中 因此有一个文件“krol.txt” 问题是它从未保存input.txt文件中的最后一个“1”。我不知道为什么。我认为它是关于文件中最后一个字符的EOF,但为什么它会这样工作呢?有人能帮我吗 这是我的代码: #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int

我的问题是从文本文件中读取整数,将它们保存到数组中,然后将数组复制到新的.txt文件中

因此有一个文件“
krol.txt

问题是它从未保存input.txt文件中的最后一个“1”。我不知道为什么。我认为它是关于文件中最后一个字符的EOF,但为什么它会这样工作呢?有人能帮我吗

这是我的代码:

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

int main() {
    ofstream outFile;
    ifstream fin;
    fin.open("krol.txt");
    int l=0;
    char ch;

    while (fin.good()) {
        fin.get(ch);

        if(ch=='\n') l++;
    }
    fin.close();

    fin.open("krol.txt");
    int temp[l][2];
    int savel=l;
    l=0;
    int i=0;

    while (fin >> (temp[l][i])) {
        i++;
        if(i==2) { 
                i=0;
                l++;
        }
    }

    outFile.open("save.txt");

    for (int i=0, j=0;j<savel;i++) {
        if (i==2) {
            i=0; j++;
        }
        outFile << temp[j][i];
    }

    outFile.close();
    system("PAUSE");
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
出流孔的直径;
流鳍;
财务公开(“krol.txt”);
int l=0;
char ch;
while(fin.good()){
fin.get(ch);
if(ch=='\n')l++;
}
fin.close();
财务公开(“krol.txt”);
内部温度[l][2];
int savel=l;
l=0;
int i=0;
而(fin>>(临时[l][i])){
i++;
如果(i==2){
i=0;
l++;
}
}
outFile.open(“save.txt”);

对于(int i=0,j=0;j该文件中可能有4个'\n'字符,您考虑过吗?

这可以很好地保存所有数字。问题是,它在
save.txt
中存储额外的数字

将最后一行计数两次。这将为您提供另外两个未初始化的
int
s。这两个
int
s可以显示为任意整数

我发现两个问题。获取行数的第一个循环应该更像

while (fin.get(ch)){
    if (ch == '\n')
        l++;
}
如果最后一行没有结尾的
\n
,则可以以比需要少一行结束

输出回路可以简化为

for (int j = 0; j < savel; j++){
    for (int i = 0; i < 2; i++)
        outFile << temp[j][i] << ' ';
}
for(int j=0;joutFile save.txt疯狂地保存了'2 4 3 7 3 13 2 4 3 1 2293083 0'。最后两个数字代表什么?这到底是什么?这真的可以编译吗?
int temp[l][2];
(这是
l
一个非
const
int
变量,不是数字)。
while (fin.get(ch)){
    if (ch == '\n')
        l++;
}
for (int j = 0; j < savel; j++){
    for (int i = 0; i < 2; i++)
        outFile << temp[j][i] << ' ';
}