2015-09-25 7 views
0

У меня есть код: Я хочу взять идентификатор, убедитесь, что он имеет 8 символов в длину, убедитесь, что каждая цифра - это номер, и продолжайте спрашивать, пока они введите правильный ввод. До того, как кто-то узнает об этом, я исследовал и попытался посмотреть ответы: c Я не понимаю, почему он говорит, что идентификатор ввода 00000002 является недопустимым идентификатором в соответствии с моим кодом. Это не работает. может ли кто-нибудь помочь?Где я ошибаюсь Re: проверка данных C++

void Student::getData(){ 
    string id_; 

    cout << "lastName?" << endl; 
    cin >> lastName; 

    cout << "firstName?" << endl; 
    cin >> firstName; 

    cout << "ID?" << endl; 
    while(getline(cin,id_) && id_.size() != 8){ 
    cout << "Invalid ID" << endl; 
    } 
+2

Вы добавили cout для просмотра фактического размера 'id_'? что поможет вам отлаживать немного больше. – scrappedcola

+0

Рекомендовать инвестировать некоторое время в изучение использования отладчика, который поставляется с вашей IDE. Это бы показало вам, что происходит почти мгновенно. Он бы не сказал вам, почему, но сделал бы ваш поиск ответа намного проще. Это вопрос, который задают пару раз в неделю. Возможно, нам понадобится «почему getline не работает?» псевдо-вопрос, для которого его легче искать. – user4581301

ответ

2
while(getline(cin,id_) && id_.size() != 8){ 

Здесь getline() только получает новую строку, оставшиеся от предыдущей строки ввода. Добавьте строку, чтобы игнорировать остальную часть строки до этого.

cin.ingore(std::numeric_limits<std::streamsize>::max(), '\n'); 
while(getline(cin,id_) && id_.size() != 8){ 
Смежные вопросы