#include<vector>
#include<iostream>
using namespace std;
int main(){
int number;
cin>>number;
string s1;
vector<string> lists;
for(int i=0;i<number;i++){
getline(cin,s1);
lists.push_back(s1);
}
for(int i=0;i<number;i++)
cout<<lists[i]<<" ";
}
当我输入5(例如)作为输入number
时,我只能输入4个字符串而不是5个字符串。
谢谢。
答案 0 :(得分:1)
您正在混合基于行的输入(getline
)和基于非行的输入(cin>>number
)。这会导致您的第一个getline
调用将 empty 字符串读入s1
,因为流中的\n
尚未被使用。
所以lists
实际上 末尾有5个元素,只是您的输出使您难以察觉。
为了防止出现此问题,请将所有内容转换为基于行的输入。替换为:
int number; cin>>number;
与此:
std::string line;
std::getline(std::cin, line);
auto const number = std::stoi(line);
无论如何,这是一个出色的解决方案,因为它可以更容易检测到错误的输入(当用户输入number
的整数以外的内容时)。
答案 1 :(得分:0)
在行cin>>number;
之后,在输入缓冲区中仍然存在换行符\n
(因为您按Enter键输入了值),要解决此问题,您可以在行cin.ignore();
处添加一行
int main(){
int number;
cin>>number;
cin.ignore(); // add this line
string s1;
vector<string> lists;
for(int i=0;i<number;i++){
getline(cin,s1);
lists.push_back(s1);
}
for(int i=0;i<number;i++)
cout<<lists[i]<<" ";
}