for循环中的C ++ getline

时间:2017-04-06 07:57:37

标签: c++

我学会使用之前c++python的经验R进行编程。我说我理解循环很好,但现在我发现我不知道关于它们的问题。这是一段代码。

for (int i = 0; i != 1; ){
    string name;
    getline(infile, name);
    if (name == end_input){
        i = 1;
    }
    else{
        names.push_back(name);
    }
}

整个程序应该(并且确实)从文件name中读取名称(infile)并将它们存储到names字符串中。比我希望他们存储在另一个文件中。当我查看代码时,我会c++执行以下操作:

创建整数i并将其设置为0

创建字符串名称

infile读取行并将此行存储到names字符串向量中。

除非name == end_input

,否则将重复此操作

由此我会说c++会一次又一次地在input文件中存储第一行,因为我没有告诉他在getline第一行之后跳转到下一行。但是程序按照作者的预期逐行读取该文件中的所有名称。怎么可能?

谢谢。

2 个答案:

答案 0 :(得分:2)

getline在读取一行后自动移动到下一行。

同样,do while循环可能会更好地满足您的目的。

答案 1 :(得分:1)

如果内置函数的行为与预期不符,则逻辑下一步应该是检查Documentation。如果您这样做,您将看到以下内容:

  

从is中提取字符并将它们存储到str中,直到找到定界字符delim(或换行符,'\ n',for(2))。

     

如果到达文件末尾或者在输入操作期间发生其他错误,则提取也会停止。

     

如果找到分隔符,则将其提取并丢弃(即不存储它,下一个输入操作将在其后开始)。

哪个回答你的问题。