我目前正在学习C ++,并且是编程的新手。我遇到一个问题并尝试解决,但最终结果不理想。然后在python导师的帮助下,我尝试可视化了我的代码的执行情况,即使在运行 cin >> q 之后,执行下一条我尝试在其中尝试的语句时,它也不会接受输入并显示错误使用 q 。
请,任何人都可以告诉问题出在哪里以及导致这种错误的原因吗?
Click here to see the problem I tried solving
#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;
}
答案 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
。
这是因为在代码中每次出现\n
和cin
都会刷新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;
}
这将产生正确的输出。