变量中的间距问题

问题描述 投票:1回答:3

我正在建造一本书籍的引文机。但是,我在引用方面遇到了问题。这是我的代码:

#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 . . .

因此,当所有细节都是单个单词时,它就能完美运行。但是当任何细节变成不止一个单词时,它需要第一个单词来回答它应该回答的问题,第二个单词来回答下一个问题。那么我该如何让这两个词回答它应该回答的问题呢?如果有人能帮助我解决这个问题,我将不胜感激。

c++
3个回答
4
投票

而不是做

cin >> nameofbook;

尝试

getline(cin, nameofbook);

其余部分也是如此。当你只做cin >> x时,它只会读到下一个空格。如果你想阅读整行,你应该做getline


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

0
投票

您需要使用std :: getline(cin,stringName)函数进行输入,该函数接受整行作为输入,直到您按下新行字符。使用cin获取字符串输入将破坏第一个空格字符出现时的输入。

© www.soinside.com 2019 - 2024. All rights reserved.