2015-08-12 2 views
0

Вот мои коды:подсказка «GetLine» получает пропущено, не работает, как предполагалось

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    int age1; 
    int age2; 
    string name1; 
    string name2; 

cout << "Please enter the name for one people: " << "\n"; 
getline (cin, name1); 
cout << "Please enter the age for this people: " << "\n"; 
cin >> age1; 

cout << "Please enter the name for another people: " << "\n"; 
getline (cin, name2); 
cout << "Please enter the age for this people too: " << "\n"; 
cin >> age2; 

if ((age1 <= 100 || age2 <= 100) && (age1 < age2)) 
{ 
    cout << name1 << " is younger!" << "\n"; 
} 
else if ((age1 <= 100 || age2 <= 100) && (age1 > age2)) 
{ 
    cout << name2 << " is younder!" << "\n"; 
} 
else if ((age1 <= 100 || age2 <= 100) && (age1 = age2)) 
{ 
    cout << name1 << " and " << name2 << " are of the same age!" << "\n"; 
} 
else 
{ 
    cout << "You've got some really old people that are well older than 100!"; 
} 
} 

Первый GetLine и CIN работает отлично. Я могу получить запрос на ввод. Однако вторая линия getline и cin запрашивается сразу, поэтому я могу только вводить данные для cin. (Второй getline пропускается!)

Если я использую четыре cins, программа будет работать правильно.

+0

Напоминание: потоки, управляемые 'cin' и' cout', фактически не связаны; появление такого рода является артефактом того, как работает ваша консоль и типичные шаблоны ввода-вывода. Очень легко запутать себя, если предположить, что индивидуальные использования 'cin' и' cout' несут отношения, которых у них нет. (сами объекты имеют отношение к «привязанным», хотя это действительно не актуально здесь. Это означает, что если 'cin' исчерпывает данные, он будет очищать' cout', прежде чем он запрашивает больше данных из операционной системы) – Hurkyl

ответ

0

Вам нужен ; после getline (cin, name);

надеюсь, что это помогает

+0

Я забыл «;» когда я переписал две строки. В исходной программе есть «;» s. И я просто попробовал еще раз, даже с «;», он по-прежнему пропускает второй getline. Я редактировал код для добавления «;». –

0

cin >> age1; не читает символ новой строки после номера. Новая строка остается во входном буфере, а затем преждевременно останавливает второй getline.

Итак, ваша программа already works до тех пор, пока вы вводите первый возраст и второе имя в той же строке.

Одно решение было бы пропустить пробел после цифры:

cin >> age1 >> ws; 

Live demo.

0

первая: cin >> возраст; Он берет число и сохраняет в возрасте, но при этом время оставляет символ новой строки в самом буфере. поэтому, когда появляется приглашение для следующего имени, cin находит, что оставил символ новой строки в буфере и принимает его как вход. поэтому он избегает подсказки name2.

cout << "Please enter the name for one people: " << "\n";  
    cin>>name1; 
    cout << "Please enter the age for this people: " << "\n"; 
    cin >> age1;<<--**this left the new line character in input buffer** 
    cin.get();<<-- **get that newline charachter out of there first** 
    cout << "Please enter the name for another people: " << "\n"; 
    getline (cin, name2); 
    cout << "Please enter the age for this people too: " << "\n"; 
    cin >> age2; 

Теперь я даю name1-> Шишир age1-> 28 name2-> CCR возрастное> 22 печатает CCR является younder! < - правописания тоже неправильно: D

для получения дополнительной информации на GetLine и получить() для чтения C++ Primer Plus листинга 4.3, 4.4, 4.5

Счастливого кодированием

0

Я бы предложил использовать cin.ignore (100, '\ n'). Он игнорирует количество символов, которые вы указываете при его вызове (100 в приведенном выше примере), вплоть до символа, который вы указываете в качестве точки останова. Например:

cout << "Please enter the name for one people: " << "\n"; 
getline (cin, name1); 
cout << "Please enter the age for this people: " << "\n"; 
cin >> age1; 
cin.ignore(100, '\n'); 
cout << "Please enter the name for another people: " << "\n"; 
getline (cin, name2); 
cout << "Please enter the age for this people too: " << "\n"; 
cin >> age2; 
cin.ignore(100, '\n');