我的问题涉及从文本文件中读取整数,将它们保存到数组中,然后将数组复制到新的.txt文件中。
所以有一个文件“krol.txt
”
2 4
3 7
3 13
2 4
3 1
问题是它从来没有保存输入.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;
}
答案 0 :(得分:2)
这样可以保存所有数字。问题是,它在save.txt
中存储了其他数字。
用
while (fin.good()){
...
}
你计算最后一行两次。这为您提供了两个未初始化的 int
。这两个int
可以显示为任何整数。
我看到两个问题。获得行数的第一个循环应该更像是
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] << ' ';
}
最后,如果您使用c++,则应考虑使用std::vector
而不是普通数组。然后你不需要预先分配你的数组,只需一次就可以读取文件。
答案 1 :(得分:0)
你认为那个文件中可能有4个\ n'字符吗?