#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
ifstream in ("input.txt");
ofstream out ("output.txt");
int main(){
char collection [30];
while ( in.good() ){
in >> collection;
}
cout << collection[0] <<endl;
in.close();
out.close();
return 0;
}
我正在尝试用C ++编程读取文本文件,但是它肯定无法正常工作,因为它无法打印任何内容。它只是包含一些操作数的一行。有人可以帮我吗?
答案 0 :(得分:1)
将in
和out
的那些定义放在main
内。除非绝对必要,否则不要创建全局变量。
代码在输入中循环,并在每次循环中覆盖collection
的内容。当到达输入末尾时,它将写出collection
中的第一个字符。它应该显示每次循环读取的内容,或者将读取的每个字符串添加到容器中。如果是前者,则代码将如下所示:
#include <fstream>
#include <iostream>
int main() {
std::ifstream in("input.txt");
std::string input;
while (in >> input)
std::cout << input << '\n';
return 0;
}
请注意,原始代码未使用out
,因此在此将其省略。同样,当in
是自动对象(即在main
内定义)时,main
返回时它会被销毁。析构函数所做的一件事是关闭文件,因此无需调用in.close();
。
如果您想将输入放入某种集合中,那将是一个简单的更改:
#include <fstream>
#include <iostream>
#include <vector>
int main() {
std::ifstream in("input.txt");
std::string input;
std::vector<std::string> collection;
while (in >> input) {
collection.push_back(input);
std::cout << input << '\n';
}
std::cout << "Contents of collection:\n";
for (auto& x : collection)
std::cout << x << '\n';
return 0;
}
如果要将文本写入输出文件,只需执行以下操作:
#include <fstream>
int main() {
std::ifstream in("input.txt");
std::ofstream out("output.txt");
std::string input;
while (in >> input)
out << input << '\n';
return 0;
}
这会将输入中的每个单词写到输出文件中的单独一行中。如果您只想原样复制文件,那就更简单了:
#include <fstream>
int main() {
std::ifstream in("input.txt");
std::ofstream out("output.txt");
out << in.rdbuf();
return 0;
}