cin.getline пропускает одну строку ввода и принимает следующую - PullRequest
2 голосов
/ 10 октября 2010

Почему cin.getline начинает работать для второй строки ввода тела, но прерывается на первой?

Пример запуска программы:

Enter name: Will
Enter body: hello world
hello again <= It accepts this one



 char* name = new char[100];
 char* body = new char[500];

 std::cout << "Enter name: ";
 std::cin.clear();
 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
 std::cin.getline(name, 100);

 std::cout << "Enter body: ";
 std::cin.clear();
 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
 std::cin.getline(body, 500');
 std::cin >> body;

Ответы [ 2 ]

2 голосов
/ 10 октября 2010

Как говорит JoshD, но кроме того, вы можете сэкономить много труда и усилий, используя std::string и std::getline из заголовка <string>.

Like ...

#include <string>
#include <iostream>
int main()
{
    using namespace std;
    std::string name;
    cout << "Enter name: ";  getline( cin, name );
}

Приветствия & hth.,

- Alf

2 голосов
/ 10 октября 2010

Поскольку вы игнорируете первую строку с оператором cin.ignore.

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Это будет игнорировать всю строку.

Удалите это, и вы получите то, что вы хотите.

Возможно, вы также захотите сбросить поток cout, чтобы сразу получить отпечатки на экране.Добавьте cout.flush(); перед вашим getline.

...