【问题标题】:Reading data from a file in C++ [closed]从 C++ 文件中读取数据 [关闭]
【发布时间】:2015-10-27 14:05:52
【问题描述】:

我正在尝试逐行从文件中读取数据并将它们推回向量 数据格式为 123 23 45 19 46 22 87 26 31

程序没有输出,错误代码为 11。

std::vector<int>* readDataFromFile(std::string path){


    std::vector<int>* v = new std::vector<int>;
    int a, b, c;
    std::ifstream inputStream;
    inputStream.open(path);
    while(inputStream>>a>>b){
        v->push_back(a);
        v->push_back(b);
        v->push_back(c);
    }
    inputStream.close();

}

int main() {

    std::vector<int>* v = readDataFromFile("file1.txt");
    for(auto it= v->begin(); it != v->end(); it++){
        std::cout<<*it<<std::endl;
    }

    return 0;
}

【问题讨论】:

  • 您确定文件在程序运行的同一目录下吗?
  • 是的,它在同一个目录中。
  • 你应该检查inputStream.is_open()。你也永远不会在while(inputStream&gt;&gt;a&gt;&gt;b)中接受c
  • 您在readDataFromFile 中缺少return 语句。
  • 那太恶心了,return 语句和 c 做到了。道歉。

标签: c++ file


【解决方案1】:
  1. 不要忘记在循环中读取 c:

    while(inputStream>>a>>b>>c) {
        v->push_back(a);
        v->push_back(b);
        v->push_back(c);
    }
    
  2. 您正在动态分配 std::vector 并且永远不会删除它。而是按值返回向量。

  3. 而且 fstream::close 的调用也不是必需的,当流超出范围时会从 fstream 的析构函数中关闭。

  4. 一般情况下,最好通过 const 引用传递只读字符串参数。

    #include <iostream>
    #include <fstream>
    #include <vector>
    
    std::vector<int> readDataFromFile(const std::string& path){
      std::vector<int> v;
      int a, b, c;
      std::ifstream inputStream(path);
      while(inputStream>>a>>b>>c){
          v.push_back(a);
          v.push_back(b);
          v.push_back(c);
      }
    
      return v;
    }
    
    int main() {
      std::vector<int> v = readDataFromFile("file1.txt");
      for(auto it = v.begin(); it != v.end(); it++){
          std::cout<<*it<<std::endl;
      }
    
      return 0;
    }
    

【讨论】:

  • 值得注意的是,按值返回std::vector 可能会复制整个向量,具体取决于编译器能够执行的优化。
  • 这是真的,但通常的做法是按值返回向量并依赖 RVO(或在 C++11 中移动语义)。看到这个问题:stackoverflow.com/questions/11247654/…
猜你喜欢
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
相关资源
最近更新 更多