如何在 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');
我们在 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');