【问题标题】:getline() function in visual studio 2012 working differently, directly skipping to the last lineVisual Studio 2012 中的 getline() 函数工作方式不同,直接跳到最后一行
【发布时间】:2012-12-11 10:06:57
【问题描述】:

这是我第一次使用 getline(),我认为它有问题! 这是我的代码:

ifstream file ("new2.csv");
string val;
while (file.good())
{
    getline (file,val);
}
cout<<val;

无论我在 csv 文件中有多少行,输出始终是 csv 文件的最后一行。

我的 csv 文件是一个简单的分隔文件。喜欢:

cat,dog,a,b,c,hello,world
monkey,flower,text,word

我认为 getline 应该读取 csv 文件的第一行,但在这种情况下,我的输出将是:monkey,flower,text,word

这发生在 csv 文件中的任意数量的行中。 我无法找出可能是什么原因。请帮我。 谢谢。

【问题讨论】:

  • 你有一个循环...是什么让你认为它会读取第一行然后停止循环?
  • 嗯,你循环,将每一行抓取到同一个变量中,覆盖它之前的内容,然后输出它。你期待什么?
  • 我可能会选择 while (std::getline(file, val)) {std::cout &lt;&lt; val;} 并忘记整个 good() 部分。

标签: c++ csv getline sstream import-from-csv


【解决方案1】:
while (file.good())
{
    getline (file,val);
}
cout<<val;

您的cout 在循环之外,因此您只会打印最后一行。

【讨论】:

    【解决方案2】:

    当然,它只会打印从文件中读取的最后一行,因为 cout 会在循环外打印,并且会在读取完所有行后打印最后一行。

    你应该这样写:

    ifstream file ("new2.csv");
    string val;
    while (file.good())
    {
        getline (file,val);
        cout<< val << endl;
    }
    

    【讨论】:

    • 哦.. 非常感谢(那太傻了!!)这是我第一次使用 getline,所以遇到了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2011-12-08
    • 2016-02-20
    • 2012-09-22
    • 2012-11-15
    相关资源
    最近更新 更多