我具有以下功能,该功能可以通过以下方式将文本保存为特定格式的内容:
#include <fstream>
#include <iostream>
#include <iomanip>
int main ()
{
using namespace std;
fstream fs;
string str1 = string("1");
string str2 = string("12");
string str3 = string("123");
string str4 = string("1234");
fs.open ("text.txt", std::fstream::in | std::fstream::out | std::fstream::app);
fs << left << setfill(' ')
<< setw(10) << str1 << " | "
<< setw(10) << str2 << " | "
<< setw(10) << str3 << " | "
<< setw(10) << str4 << '\n';
fs.close();
return 0;
}
一旦执行了以下程序,在文件内将看到以下文本:
POS = 0123456789012345678901234567890123456789
TXT = 1 | 12 | 123 | 1234 |
此函数读取文件的内容:
#include<iostream>
#include<fstream>
using namespace std;
int main() {
ifstream myReadFile;
myReadFile.open("text.txt");
char output[100];
if (myReadFile.is_open()) {
while (!myReadFile.eof()) {
myReadFile >> output;
}
cout<<output;
}
myReadFile.close();
return 0;
}
问题是当我显示output
变量的内容时,它失去了文本内的格式,看起来像这样:
POS = 0123456789012345678901234567890123456789
TXT = 1|12|123|1234|
如何获取文件中包含的格式的文本?
答案 0 :(得分:1)
在while(file)
循环中,唯一可以接受的用例是在循环内进行一次读取。但是,while (!file.eof())
后面跟格式化的提取器运算符或在读取操作之后是否有任何处理时,总是错误的。因此,请坚持旧的无限循环,并在每次读取操作后进行测试。
如果要保留输入行中的空格,例如处理固定大小的字段文件,恕我直言,最简单的方法是使用std::getline
整体读取行:
#include <string>
...
string output;
if (myReadFile.is_open()) {
for(;;) {
getline(myReadFile, output);
if (!myReadFile) break
cout << output << "\n";
}
myReadFile.close();
}
但是实际上,单个getline
是通用阅读循环规则的一个例外,使用它会更加惯用:
while (getline(myReadFile, output)) {
cout << output << "\n";
}