C++ getLine()返回换行符,不返回数据

C++ getLine()返回换行符,不返回数据,c++,file,stream,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 << v

我有以下代码:

    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;
    }
const char*fn=fileName.c_str();
std::ifstream文件(fn);
标准:向量值(20000);
int i=0;
while(file.good())
{
getline(文件,值[i]);
i+=1;
标准::cout编辑:

抱歉,我只是在修复明显的逻辑错误

但是,以下是读取文件行的理想版本:

#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';
    }
}
#包括
#包括
#包括
int main(){
std::ifstream文件{“test.txt”};
std::向量值;
std::字符串温度;
while(getline(文件,临时)){
值。推回(温度);
}
对于(int i=0;i
抱歉,我只是在修复明显的逻辑错误

但是,以下是读取文件行的理想版本:

#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';
    }
}
#包括
#包括
#包括
int main(){
std::ifstream文件{“test.txt”};
std::向量值;
std::字符串温度;
while(getline(文件,临时)){
值。推回(温度);
}
对于(int i=0;istd::cout读取文件的更好方法:

std::string text_line;
std::vector<string> file_lines;
while (std::getline(file, text_line))
{
  file_lines.push_back(text_line);
}
std::字符串文本\u行;
std::矢量文件行;
while(std::getline(文件、文本行))
{
文件行。向后推(文本行);
}

虽然速度不是最佳的,但它完成了任务,并且没有上限(程序允许的内存量除外)。

读取文件的更好方法:

std::string text_line;
std::vector<string> file_lines;
while (std::getline(file, text_line))
{
  file_lines.push_back(text_line);
}
std::字符串文本\u行;
std::矢量文件行;
while(std::getline(文件、文本行))
{
文件行。向后推(文本行);
}
虽然速度不是最优的,但它完成了任务,并且没有上限(程序允许的内存量除外)

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

因为您在访问
值[i]
之前增加了
i

在访问
值[i]
之后立即递增
可以解决数据丢失的问题

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

因为您在访问
值[i]
之前增加了
i

在访问
值[i]
之后立即递增
可以解决数据丢失的问题


这不是读取文件的方式。您需要测试getline的返回值。请尝试
while(getline(file,value[i])
。那么,为什么这个答案可以解决丢失数据的问题,这不是一种稍微干净一点的方法来做同样的事情吗?这不是读取文件的方式。您需要测试getline的返回值。请尝试
while(getline(文件,值[i]))
。那么为什么这个答案可以解决数据丢失的问题呢?这不仅仅是做同样事情的一种稍微干净一点的方法吗?谢谢,但这如何解决数据丢失的问题呢?谢谢,但这如何解决数据丢失的问题呢?更准确地说,
i
在写入和读取
值[i]之间递增
(将增量上移一行也应该固定输出,尽管代价是
值[0]
未使用。)更准确地说,
i
值[i]
的写入和读取之间递增(将增量上移一行也应该固定输出,尽管代价是
值[0]
未使用。)