以前用codeblock写C++,读取文件我是这样写的:

    1. freopen("sample.gr","r",stdin);

    几年之后的现在,用了mac os的g++编译这样的代码,也没问题。但是把代码拷贝给其他人在VS中就会编译报错:freopen may be unsafe.

    更安全的方式如下:

    1. #include <fstream>
    2. std::ifstream file(FILENAME);
    3. if (file.is_open()) {
    4. std::string line;
    5. while (getline(file, line)) {
    6. // using printf() in all tests for consistency
    7. printf("%s", line.c_str());
    8. }
    9. file.close();
    10. }

    代码中的 line 是string类型,用 c_str() 方法即可当作 char 数组来使用,然后配合 sscanf 处理格式化的文本效果更佳。如下,可以方便的把数字提取到对应的 a,b,c 变量中。

    1. int a,b,c;
    2. string line="1 2 3";
    3. sscanf(line.c_str(), "%d %d %d", &a, &b, &c);

    参考:https://stackoverflow.com/a/51572325/13175104