使用getline在c ++中输出整个字符串

时间:2017-10-15 19:47:01

标签: c++ string

我写了这段代码。它适用于主要功能

cout << "Enter the patron's name: ";
getline(std::cin, patron.name);
cout << "Enter the book title: ";
getline(std::cin, book.title);
cout << book.title << " is now checked out to " << patron.name << endl;

然而,当我把它放在带有开关盒的do while循环下时,它不再起作用了。

do {
        cout << endl << "? "; cin >> choice;
        switch (toupper(choice)){
        case 'T':           
            cout << "Enter the patron's name: ";
            getline(std::cin, patron.name);
            cout << "Enter the book title: ";               
            getline(std::cin, book.title);
            cout <<  book.title << " is now checked out to " << patron.name << endl;
            break;
           }[enter image description here][1]
} while (choice != 'Q' && choice!= 'q');

输入如下:

有人可以向我解释为什么会这样吗?感谢

2 个答案:

答案 0 :(得分:0)

在此声明之后

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

插入

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

删除仍在输入缓冲区中的新行字符(对应于输入后按下的Enter键),否则调用getline将读取空字符串。

您应该包含标头<limits>以使用课程numeric_limits

答案 1 :(得分:0)

getline消耗T(您的输入)后的\n。这就是你获得这种行为的原因。您需要从缓冲区中刷新换行符。

您可以通过添加如下所示的语句来完成此操作。

std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
cout << "Enter the patron's name: ";