在下面给出的代码中,我试图从 cin 中获取字符串输入,但它显示了一些运行时错误。
int main(){
int t;
cin>>t;
while(t--){
string s,pat;
cin>>s>>pat;
int q;
cin>>q;
vector<pair<int,char> > queries;
for(int i=0;i<q;i++){
cin>>queries[i].first;
cin>>queries[i].second;
}
cout<<s<<endl;
cout<<pat<<endl;
}
return 0;}
所以我使用了 getline 而不是像 cin 这样的:
getline(cin,s);
getline(cin,pat);
它显示输出如下
abcde
输入
2 abcde bc 3 0 p 1 q 2 w wxyz cde 2 0 t 1 z
所以在我看来,getline 在 t 之后占用空间,它存储在第一个测试用例的字符串 s 中,第一个字符串,即“abcde”存储在字符串 pat 中,我不明白为什么它打印为空第二个测试用例行。
所以为了摆脱 t 之后的额外空间,我添加了一个额外的字符串来存储该空间,就像:
int main(){
int t;
cin>>t;
string z;
getline(cin,z);
while(t--){
string s;
getline(cin,s);
string pat;
getline(cin,pat);
cout<<s<<endl;
cout<<pat<<endl;
}
return 0;
它对输入有用
2 abcde bc wxyz cde
但是当我添加这段代码时
string s,pat;
getline(cin,s);
getline(cin,pat);
int q;
cin>>q;
vector<pair<int,char> > queries;
for(int i=0;i<q;i++){
cin>>queries[i].first;
cin>>queries[i].second;
}
它显示运行时错误。请帮助..
最佳答案
这将解决您遇到的问题。正如上面评论中提到的,您有一个空 vector 并试图访问该 vector 的一个元素。您需要创建对,然后将其插入 vector :
for(int i=0;i<q;i++){
int v;
char c;
cin>> v >> c;
queries.push_back(make_pair(v, c));
}
为了进一步解释实际问题是什么,您可以将 vector 想象成一个壁橱,您可以在其中放置一系列盒子。每个盒子在放入壁橱时都会分配一个编号(索引)。在你把一个盒子放进壁橱之前,壁橱是空的。它有可能存储盒子,但那里没有盒子。当您编写 queries[i]
行时,您实际上是走到壁橱并搜索具有特定索引的盒子,然后尝试将某些东西放入其中。但是,在您的情况下,您所拥有的只是一个空壁橱,因此当您尝试将某些东西放入一个盒子(例如 0 号盒子)时,找不到盒子,您会收到此运行时错误。为了索取具有特定索引的盒子,它必须存在并且在壁橱中。我所做的代码更改是实际创建盒子,然后将其放入壁橱。
关于c++ - getline(cin,str) 的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52688763/