C ++ getline внутри цикла пока отсутствует первая буква.Не работает без cin.ignore? - PullRequest
0 голосов
/ 07 декабря 2018

Я играл с больше недели без успеха.То, как он работает сейчас, пропустит первую букву первой итерации моего цикла while.Если я удаляю cin.ignore(), приведенный ниже код не работает.

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

int main(){
    cout << fixed << setprecision(2);
    float gpaTot = 0, gpa, clasNum;
    int creds;
    string clas, cont = "Yes", grade;

    while (cont == "Yes"){
        cin.ignore();
        cout <<"Enter a course name: ";
        getline(cin, clas);
        cout << clas << endl << "Enter number of credits: ";
        cin >> creds;
        cout << creds << endl << "Enter your grade (A, B, C, D, F): ";
        cin >> grade;
        cout << grade << endl << "Continue ('Yes' or 'No')? ";
        cin >> cont;
        cout << cont << endl;
    }

1 Ответ

0 голосов
/ 07 декабря 2018

Переместите вызов cin.ignore() в конец цикла.

while (cont == "Yes"){
    cout <<"Enter a course name: ";
    getline(cin, clas);
    cout << clas << endl << "Enter number of credits: ";
    cin >> creds;
    cout << creds << endl << "Enter your grade (A, B, C, D, F): ";
    cin >> grade;
    cout << grade << endl << "Continue ('Yes' or 'No')? ";
    cin >> cont;
    cout << cont << endl;
    cin.ignore();
}

При этом первый вызов getline не пропускает буквы.Последующие вызовы также работают нормально, потому что символ перевода строки слева от строки cin >> cont; читается и отбрасывается cin.ignore().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...