如何使用instream和ofstream读取和输出文本文件?

时间:2020-09-06 16:38:25

标签: c++ ifstream

#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 ++编程读取文本文件,但是它肯定无法正常工作,因为它无法打印任何内容。它只是包含一些操作数的一行。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

inout的那些定义放在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;
}