如何在 C++ 中获取多个句子作为输入?

How to get multiple sentences as input in c++?

我们在 c++ 中有一个作业,其中存储了关于多本书的信息(作者姓名、书名、出版商等)。
在获取书名或作者姓名时,我尝试使用函数 getline() 以句子的形式输入,但在执行时它不会询问我标题(我打算这样做)而是它直接问作者名字
这是代码:

#include<iostream>
using namespace std;

class BookInfo
{
    public:
    string title,author,publisher;
    int price,stock_position;
};

class Books
{
    BookInfo b[10];
    int no_of_books;

    public:
        void getdata()
        {
            cout<<"Enter the number of books: ";
            cin>>no_of_books;
            for(int i = 0 ; i < no_of_books ; i++)
            {
                cout<<"Title: ";
                getline(cin,b[i].title,'\n');
                cout<<"Author: ";
                getline(cin,b[i].author,'\n');
                cout<<"Publisher: ";
                getline(cin,b[i].publisher,'\n');
                cout<<"Price: ";
                cin>>b[i].price;
                cout<<"Stock Position: ";
                cin>>b[i].stock_position;
            }
        }
};

int main(void)
{
    Books a;
    a.getdata();
}

这是输出:

Enter the number of books: 1

Title: Author:

这是因为发送到您的第一个 getline 的换行符。在 cin>>no_of_books; 之后添加 cin.get() 应该可以解决问题。

cin>>no_of_books 不消耗 \n.

因此您的下一个 getline 将占用现在的空行。

问题是 cin >> no_of_books 在看到输入流中的下一个字符是换行符时终止,但不提取它。然后 std::getline 被要求提取直到一个换行符,但这是流中的第一个字符,所以它会立即停止。

如果用户输入如下内容,您可以用它做什么取决于您希望程序如何运行:

1 Old Man and the sea
Ernest Hemingway

换句话说,用户直接跟在书名后面,中间没有换行符。

对我来说,您的应用程序似乎是面向行的,因此应该忽略行中数字后的所有内容。如果是这种情况,您可以像这样忽略直到(并包括)尾随换行符的所有内容:

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