C ++ Почему getline () завершает цикл while? - PullRequest
0 голосов
/ 23 января 2019

Я только начал работать с файлами в C ++, и я все еще плохо знаком с тем, как работают файловые объекты и getline ().

Так что я вроде понимаю функцию getline () и как она работаети что он возвращает логическое значение через void * при использовании в логическом контексте, но я не понимаю, почему в коде цикл while не приводит к бесконечному циклу или ошибке, потому что нет никаких операторов, которыезавершит цикл, такой как разрыв.Спасибо за любую помощь, спасибо!

Единственное, о чем я мог особенно подумать, это то, что когда getline () выполняет свои операции и работает через каждую строку, она активно меняет состояние while (Tfile) икогда достигнут конец файла, в то время как (Tfile) больше не имеет значения true, что приводит к завершению цикла, но я не слишком уверен.

ifstream Tfile("player.txt");
string line;
while(Tfile){
        if (getline(Tfile, line))
    cout << line << endl;   
}

1 Ответ

0 голосов
/ 23 января 2019

getline устанавливает eofbit из Tfile, когда он достигает конца файла. Это приводит к тому, что operator bool из Tfile принимает значение false, что затем завершает ваш цикл.

См. iostate , спецификация возврата getline и оператор ios bool .

Обратите внимание, что поскольку getline возвращает ссылку на поток, который вы передали, то идиоматическая форма этого цикла:

ifstream Tfile("player.txt");
string line;
while(getline(Tfile, line)) {
  cout << line << endl;   
}
...