Как проверить пустую строку с помощью cin - PullRequest
0 голосов
/ 24 марта 2012

Ниже приведен код функции, которую я использую для ввода данных студента в массив структур студента.Я хочу, чтобы цикл завершился, когда я достиг предела (n), что нормально ИЛИ, и это то, с чем у меня возникают проблемы, когда для имени студента вводится пустая строка?У кого-нибудь есть предложения?Текущий метод, который я использую, не работает (оператор if ниже 'cin.getline (pa [i] .fullname, SLEN - 1);')

int getinfo(student pa[], int n)
{
    cout << "\nPlease enter student details:\n\n";

    int i;
    for (i = 0; i < n; i++)
    {
        cout << "Student " << (i + 1) << ": \n";
        cout << "  > Full name: ";
        cin.getline(pa[i].fullname, SLEN - 1);
        if (pa[i].fullname == NULL)
            continue;
        cout << "  > Hobby: ";
        cin.getline(pa[i].hobby, SLEN - 1);
        cout << "  > OOP Level: ";
        cin >> pa[i].ooplevel;;
        cin.get();

        cout << endl;
    }

    cout << "--------------------------------------" << endl;

    return i;
}

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Лучше с string и с атомным циклом:

std::string name, hobby, oop;

std::cout << "Name: ";
if (!(std::getline(std::cin, name)) { break; }

std::cout << "Hobby: ";
if (!(std::getline(std::cin, hobby)) { break; }

std::cout << "OOP: ";
if (!(std::getline(std::cin, oop)) { break; }

// if we got here, everything succeeded.
pa[i].name = name; pa[i].hobby = hobby; pa[i].oop = oop;

// or better, pass a `std::vector<student> &`:
pa.push_back(student(name, hobby, oop));
0 голосов
/ 24 марта 2012

getline() читает пустую строку для пустой строки. Обратите внимание, что вы должны всегда проверять, был ли ваш ввод успешным. Лично я бы тоже использовал std::string.

...