【问题标题】:While loop not initialiazing [closed]While循环未初始化[关闭]
【发布时间】:2016-05-29 19:11:36
【问题描述】:

我的 while 循环似乎没有初始化。文件 filename.csv 是一个 CSV 文件,其中只有一列包含 -1 和 1 之间的 2000 个数字。我已经尝试使用 \n 和 \r 进行 getline。两者似乎都不起作用。我没有得到任何输出。

我对 C++ 很陌生,所以这可能很明显。

#include <iostream>
#include <fstream>
#include <string>


using namespace std;

int main()
{    
    float rarray_train[2000];
    int rrow_train=0;
    ifstream  r_train("filename.csv");
    string rline_train;    

    while( getline(r_train,rline_train,'\n') )
    {
        rarray_train[rrow_train] = stof( rline_train.c_str() );
        cout<<rarray_train[rrow_train]<<endl;
        ++rrow_train;
    }
return 0;
}

编辑:对此感到抱歉。我拼错了我的文件路径。谢谢你的帮助。不知道这里的礼仪,所以如果您认为我应该删除问题,请告诉我。

【问题讨论】:

  • 提示:在提出任何问题之前,请务必将您的代码缩减为minimal reproducible example。这要么引导你找到答案,要么至少提出一个更好的问题。
  • 使用调试器或一些调试语句来查看执行是如何通过循环的。还要检查打开文件是否成功,并且您还应该有条件在 2000 次迭代后退出循环
  • @Deduplicator 它对我来说就像一个 MCVE,当然除了不包括输入文件
  • @Deduplicator 你建议我删除什么?
  • 问题的最可能原因是运行程序的目录中不存在文件“filename.csv”。添加一行来检查文件是否打开成功。 if (r_train.is_open()) { ... }.

标签: c++ while-loop getline


【解决方案1】:

在没有文件 filename.csv 或文件为空时运行代码不会产生任何输出。当文件存在时运行代码会得到预期的输出。

PS:你不需要.c_str()

【讨论】: