c++ - getline(cin,str) 的奇怪输出

标签 c++ string getline

在下面给出的代码中,我试图从 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/

相关文章:

c++ - 在 Windows 上从用户模式程序发送和接收 ARP 数据

C++:使用递归加倍数字

c# - 奇怪的 C# 路径问题

C++ : Getline Function Mechanics

c++ - 使用 fstream 从 txt 文件中获取行

c++ - 删除类数组指针时出错

c++ - 用于在 C++ 中同步线程的二进制信号量

string - Z3 字符串 : finding the API

c - 在 C 字符串中包含双引号 (")

python - 为什么在 C++ 中从 stdin 读取行比 Python 慢得多?