【问题标题】:When using a nested while loop with getline, the inner while loop won't run more than once当使用带有 getline 的嵌套 while 循环时,内部 while 循环不会运行超过一次
【发布时间】:2018-03-22 15:34:33
【问题描述】:

我正在使用 getline 从 .txt 文件中读取信息并使用该信息创建邻接图。文本文件的行数总是与每行中的条目一样多,但这个数量永远不知道。到目前为止,我有这个:

string title = argv[1];

ifstream myfile(title);

string line;
string word;

stringstream ss;

if (myfile.is_open()) 
{
     while (getline(myfile,line)) 
     {
         ss << line; //this line was edited after the post, the problem                 //is the same.
         while (getline(ss, word, ',')) 
         {
            //do some stuff to word
         }
     }
}

第一个while循环完成并将文件中的每一行读入line,然后每一个新行都成功读入ss。但是内部while循环只运行一次,外部while循环第一次运行。此后,while 条件 (getline(ss,word,',')) 为 false。

测试文件中信息的格式如下:

城市,亚特兰大,波士顿,博尔德,夏安,芝加哥

亚特兰大,0,-1,-1,-1,-1

波士顿,-1,0,-1,-1,982

博尔德,-1,-1,0,-1,1130

夏安,-1,-1,-1,0,-1

芝加哥,-1,982,1130,-1,0

我真的不知道发生了什么。有什么想法吗?

【问题讨论】:

  • 更改为 ss&lt;&lt;line; 可能会成功。
  • 我建议根据您的输入记录对结构进行建模。在结构中重载operator&gt;&gt; 以读取列/字段。恕我直言,这种设计比您尝试使用循环在列中阅读要好。此外,列并不多,因此通过读取每个字段而不是使用循环,您的代码可能会更有效。
  • 我相信你要把line插入stringstream ss,把&gt;&gt;改成&lt;&lt;。欲了解更多信息,请访问 (cplusplus.com/reference/sstream/stringstream)

标签: c++ getline


【解决方案1】:

您可能需要在重用后清理流状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多