C++ 代码在删除if语句时生成两个不同的

C++ 代码在删除if语句时生成两个不同的,c++,C++,当我从codeforces解决一个问题时(链接到问题:),我遇到了下面代码的奇怪输出 #包括 #包括 #包括 使用名称空间std; void solve(){ int64\n; cin>>n; 如果(n) 因此,如果您希望if按预期工作,它应该是: if (n<2){ cout<<0<<endl; if(n == 1) { std::cin >> n; } // remove 1 item from stream return;

当我从codeforces解决一个问题时(链接到问题:),我遇到了下面代码的奇怪输出

#包括
#包括
#包括
使用名称空间std;
void solve(){
int64\n;
cin>>n;
如果(n)
因此,如果您希望if按预期工作,它应该是:

if (n<2){
    cout<<0<<endl;
    if(n == 1) { std::cin >> n; } // remove 1 item from stream
    return;
}
if(n
因此,如果您希望if按预期工作,它应该是:

if (n<2){
    cout<<0<<endl;
    if(n == 1) { std::cin >> n; } // remove 1 item from stream
    return;
}

if(不,我太笨了。谢谢。我很想把这归咎于比赛中的时间压力,但这一个太笨了:(我可以在
if(n>n;}
中再问一个问题吗?@Ch3s
clear()
只是重置流上的错误标志,因此这几乎肯定不是您想要的。您可以执行
std::cin.ignore(std::numeric\u limits::max(),'\n')
读取到下一个换行(或者如果不存在,则读取流的结尾)。但这只是在你确定输入内容看起来像你发布了它的情况下进行的。
std::cin>>n
实际上会解析整数,并在任何空格或非数字字符处停止。啊,我太笨了。谢谢。我很想把这归咎于比赛中的时间压力,但这一个太笨了:(还有一个问题,我可以在
if(n>n;}
中使用
cin.clear()
?就像这篇文章中提到的@Ch3s
clear()
只是重置流上的错误标志,所以这几乎肯定不是您想要的。您可以执行
std::cin.ignore(std::numeric_limits::max(),'\n')
读取到下一行。)(如果不存在,则为流的结尾)。但只有在您确定输入看起来像您发布了它的情况下,才能执行此操作。
std::cin>>n
实际解析整数,并在任何空格或非数字字符处停止。
    if (n<2){
            cout<<0<<endl;
            return;
    }
4
2
3
1
0
5
3
15
if (n<2){
    cout<<0<<endl;
    return;
}
vector<int64_t> vec(n, 0);
for(auto &i: vec){
        cin>>i;
}
if (n<2){
    cout<<0<<endl;
    if(n == 1) { std::cin >> n; } // remove 1 item from stream
    return;
}