cin语句在循环的第三次迭代中被跳过

问题描述 投票:-1回答:1

我一直在尝试解决Codechef竞赛问题。在我的程序逻辑中,第一和第二次迭代一切正常,并给出了所需的结果,但是在第二次迭代中,cin语句被完全忽略了。但是,具有cout<<" ss ";的下一行工作正常。

我已经搜索了堆栈溢出的可能解决方法,他们说使用cin.clear()和cin.ignore(),但我仍然没有用。我做错了吗?

这里是问题https://www.codechef.com/problems/DIET的链接

#define REP(limit) for(int i = 0;  i < limit; i++)
#define REP2(limit2) for(int j = 0; i < limit2; j++)


int main()
{
    int testcases;
    cin>>testcases;
    while(testcases--){
        int days, diet, current  = 0;
        cin>>days>>diet;
        bool res = true;

        REP(days){
            int x;
            cin>>x;
            cout<<"  ss "; 
            current += x;

            if(current < diet){
                cout<<"NO "<<i+1;
                res = false;
                break;
            }

            current -= diet;
        }
        if(res == true){
            cout<<"YES";
        }
    }
    return 0;
}
c++ cin
1个回答
0
投票

如果得出结论“否”,则退出循环,将该行的其余部分保留在输入缓冲区中。在发布测试用例的情况下,您将在第二种情况下读取3并打印“否”,将10 10保留为“天数”和“饮食”,将3 4 8 1 1留作第三种情况的读入。

一次读取一行或使用std::ignore

© www.soinside.com 2019 - 2024. All rights reserved.