我正在为书籍制作一台引文机。但是,我在引用方面遇到了问题。这是我的代码:
#include <iostream>
using namespace std;
string nameofbook,lauthor,x,fmauthor,year,publisher,citystate;
int main(){
cout<<"Welcome to the citation machine. What do you want to cite?"<<endl;
cin>>x;
if(x == "book"){
cout<<"What is the name of the book?"<<endl;
cin>>nameofbook;
cout<<"What is the last name of the author?"<<endl;
cin>>lauthor;
cout<<"What is the first and middle name of the author in abbreviations?"<<endl;
cin>>fmauthor;
cout<<"Which year is the book published?"<<endl;
cin>>year;
cout<<"Who is the publisher?"<<endl;
cin>>publisher;
cout<<"Which state or city is the publisher located at?"<<endl;
cin>>citystate;
cout<<"You are done!"<<endl;
cout<<"The citation is"<<endl;
cout<<lauthor;
cout<<" ";
cout<<fmauthor;
cout<<" ";
cout<<"(";
cout<<year;
cout<<")" ;
cout<<" ";
cout<<nameofbook;
cout<<" ";
cout<<citystate;
cout<<":";
cout<<" ";
cout<<publisher;
}
return 0;
}
当我在Dev C ++中编译并运行它时,它给了我:
Welcome to the citation machine. What do you want to cite?
book
What is the name of the book?
Catching Fire
What is the last name of the author?
What is the first and middle name of the author in abbreviations?
Collins S.
Which year is the book published?
Who is the publisher?
Scholastic Corporation
Which state or city is the publisher located at?
You are done!
The citation is
Fire Collins (S.) Catching Corporation: Scholastic
--------------------------------
Process exited after 88.09 seconds with return value 0
Press any key to continue . . .
当我让所有细节都成为一个单词时,它变为:
Welcome to the citation machine. What do you want to cite?
book
What is the name of the book?
Mockingjay
What is the last name of the author?
Collins
What is the first and middle name of the author in abbreviations?
S.
Which year is the book published?
2009
Who is the publisher?
Scholastic
Which state or city is the publisher located at?
NYC
You are done!
The citation is
Collins S. (2009) Mockingjay NYC: Scholastic
--------------------------------
Process exited after 72.02 seconds with return value 0
Press any key to continue . . .
因此,当所有细节都是一个单词时,它就完美无缺。但是当任何细节变成不止一个单词时,它需要第一个单词来回答它应该回答的问题,第二个单词来回答下一个问题。那么我该如何让这两个词回答它应该回答的问题呢?如果有人能帮助我解决这个问题,我将不胜感激。
答案 0 :(得分:4)
而不是做
cin >> nameofbook;
试
getline(cin, nameofbook);
并且其余部分类似。当你只做cin >> x
时,它只会读到下一个空格。如果您想阅读整行,您应该getline
。
答案 1 :(得分:4)
您可以使用getline()
代替cin
,因为它从string
获取代币。
cout<<"What is the first and middle name of the author in abbreviations?"<<endl;
getline (std::cin, fmauthor); // and as for other qsns
答案 2 :(得分:0)
您需要使用std :: getline(cin,stringName)函数进行输入,该函数接受整行作为输入,直到您按下新行字符。使用cin获取字符串输入将破坏第一个空格字符出现时的输入。