Czytanie wielu linii z pliku przy użyciu getline ()

Próbuję wczytać, a następnie wyświetlić zawartość pliku tekstowego z trzema wierszami w następujący sposób:

Bob Dylan 10 9

John Lennon 8 7

David Bowie 6 5

Dla każdego wiersza chcę po prostu wypisać linię, tj. FirstName LastName number1 number2.

Używam do tego następującego kodu:

int num1;
int num2;
string firstName;
string lastName;
string fullName; 
ifstream inFile;

inFile.open("inputFile.txt");

while (getline(inFile, firstName))
    {
        inFile >> firstName >> lastName >> num1 >> num2;

        fullName = firstName + " " + lastName;

        cout << fullName << " " << num1 << " " << num2 << endl;
    }

inFile.close();

Są 2 problemy z wyjściem z tego. Po pierwsze, pierwsza linia nie jest wyprowadzana, choć z eksperymentów wiem, że to czyta. Po drugie, po wczytaniu i wyprowadzeniu ostatnich 2 linii (zgodnie z potrzebami) program wyświetla wszystko w ostatniej linii Z WYJĄTKIEM imienia (w tym przypadku ostatnią rzeczą, którą drukuje, jest Bowie 6 5).

Czy ktoś może użyć tego prostego przykładu, aby wyjaśnić, jak działa funkcja getline podczas odczytywania wielu wierszy z pliku? (Nawet nie wiem, czy jest to najlepszy sposób, ale to jedyny sposób, w jaki wiem.) Oto kilka szczegółowych pytań.

Po pierwsze, czy getline warunkowa pętli while (inFile, firstName) zwraca wartość logiczną? Jeśli tak, jak to może być prawda (tj. Jak można uruchomić pętlę while), jeśli jeszcze nie podałem wartości firstName? Czy jest tak, że program odczytuje pierwszą linię i jeśli coś tam jest, to wykonuje pętlę while, ale zaczynając od drugiej linii, ponieważ już użył pierwszej do sprawdzenia zawartości?

Po drugie, jeśli firstName ma wartość i jeśli ta wartość jest pierwszą nazwą w pierwszym wierszu (w tym przypadku „Bob”), dlaczego w ogóle nie ma wyjścia pierwszego wiersza? Dręczyłem mózg, próbując dowiedzieć się, dokąd się udał.

Po trzecie, po wczytaniu programu i wyświetleniu dwóch ostatnich linii, program przechodzi do następnej linii i napotyka tylko puste znaki, prawda? Więc jaka byłaby wartość firstName? Czy będzie pusta, czy nadal będzie to „David”? Jeśli jest pusta, dlaczego pętla while wykonuje się ponownie? Ale jeśli jest to „David”, to dlaczego program nie wyświetla tej wartości razem z innymi?

Btw, pracuję z podręcznika (nie do zadania domowego) i obejmuje on getline, ale nie dla wielu linii. Ale ćwiczenia obejmują wiele linii, więc jestem trochę zagubiony.

questionAnswers(1)

yourAnswerToTheQuestion