getLine()返回换行符,没有数据

时间:2018-10-05 23:39:20

标签: c++ file stream

我有以下代码:

    const char *fn = fileName.c_str();
    std::ifstream file (fn);
    std::vector<std::string> value(20000);
    int i = 0;
    while ( file.good() )
    {
        getline ( file, value[i] );
        i+=1;
        std::cout << value[i]<< std::endl;
        std::cout << i << std::endl;
    }

程序读取整个文件,我知道这是因为打印了正确数量的索引。但是,没有数据,只是在每次打印“ i”之前换行。这是我在Windows中从excel保存的文件,正在Linux中阅读-这是我的问题吗?我的数据怎么了?

3 个答案:

答案 0 :(得分:2)

  

没有数据,每次打印“ i”之前只有一行。

因为在访问i之前先增加value[i]

在访问i之后紧随value[i] 即可解决数据丢失的问题。

DEMO

答案 1 :(得分:0)

编辑:

对不起,我只是在解决明显的逻辑错误。

但是,这是读取文件行的​​理想版本:

#include <iostream>
#include <fstream>
#include <vector>

int main() {
    std::ifstream file {"test.txt"};
    std::vector<std::string> values;

    std::string temp;

    while (getline(file, temp)) {
        values.push_back(temp);
    }

    for (int i = 0; i < values.size(); ++i) {
        std::cout << values[i] << '\n' << i << '\n';
    }
}

答案 2 :(得分:0)

一种读取文件的更好方法:

std::string text_line;
std::vector<string> file_lines;
while (std::getline(file, text_line))
{
  file_lines.push_back(text_line);
}

尽管不是最佳的速度,但它可以完成工作并且没有上限(除了允许的程序内存量以外)。