为什么我的C ++代码不接受输入?我的代码有什么问题?

时间:2020-08-23 18:36:24

标签: c++ loops vector

我目前正在学习C ++,并且是编程的新手。我遇到一个问题并尝试解决,但最终结果不理想。然后在python导师的帮助下,我尝试可视化了我的代码的执行情况,即使在运行 cin >> q 之后,执行下一条我尝试在其中尝试的语句时,它也不会接受输入并显示错误使用 q

请,任何人都可以告诉问题出在哪里以及导致这种错误的原因吗?

Click here to see the problem I tried solving

My C++ Code

#include <iostream>
#include<vector>
using namespace std;

int main() {
    int q,t1,t2;
    vector<int> v;
    cin>>q;
    while(q--){
        if(cin >> t1>>t2){
            if(t1==0)
            {
                v.push_back(t2);
            }
            else if(t1==1)
            {
                cout << v[t2] <<"\n";
            }
        }
        else if(cin >> t1){
            if(t1==2)
            v.pop_back();
        }
        
    }
    return 0;
}

Error I got while visualizing my code in python tutor

2 个答案:

答案 0 :(得分:2)

当您说LINQ无效时,我不知道您的意思。您的代码中没有任何东西会使它不起作用。

但是您的代码有错误。这段代码

cin

假设您可以尝试从一行中读取两个数字,如果不行,请返回并尝试从同一行中读取一个数字。 if(cin >> t1>>t2){ if(t1==0) { v.push_back(t2); } else if(t1==1) { cout << v[t2] <<"\n"; } } else if(cin >> t1){ if(t1==2) v.pop_back(); } 不能那样工作,如果您编写cin,程序将从需要查找的两个行中读取两个数字。

这里是正确编写代码的方法。

cin >> t1>>t2

看看效果如何?阅读第一个数字,然后根据需要分别阅读第二个数字。使用此代码,您仍然可以在同一行上输入两个数字。

答案 1 :(得分:1)

根据Ala在其链接中提供的测试输入,即:

8
0 1
0 2
0 3
2
0 4
1 0
1 1
1 2

正确的输出应该是

1
2
4

上面的程序将产生2。 这是因为在代码中每次出现\ncin都会刷新cout的缓冲区,并且在用户仍然输入数字的同时输出输出。

为避免这种情况,并在最终程序中获得所有输出,我们只需将输出推入第二个vector,然后在末尾cout推入其内容:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int q,t1,t2;
    vector<int> v, w;
    cin >> q;
    while(q--){
        cin >> t1;
        if (t1 == 0)
        {
            cin >> t2;
            v.push_back(t2);
        }
        else if (t1 == 1)
        {
            cin >> t2;
            w.push_back(v[t2]);   // new
        }
        else if (t1 == 2)
            v.pop_back();
    }

    // new
    for (int i = 0; i != v.size(); ++i)
        cout << w[i] << endl;

return 0;
}

这将产生正确的输出。