请问为什么运行时一输入就结束

#include<iostream>
using namespace std;
int main()
{
    int N,i,j,k,p;
    int a[100000][3];
    p=0;
    cin>>N;
    if(N<1||N>100000) cin>>N;
    for(i=0;i<N;i++)
    {    
        for(j=0;j<3;j++)
        {    cin>>a[i][j];
            if(a[i][j]<1||a[i][j]>1000000000) cin>>a[i][j];
        }
        cout<<endl;
    }
    for(i=0;i<N;i++)
    {
        k=a[i][2]-a[i][0];
        if(k>0&&a[i][1]>p) p=a[i][1];
    }
    if(p==0) cout<<"-1";
    if(p>0) cout<<p;
    return 0;
}
 

 

(1)cin>>N;
(2)if(N<1||N>100000) cin>>N;

在(1)里已经给N赋值了,在(2)里又让重新输入一遍,这么写是不对的。你应该想判断输入的值是不是在100000范围内,可以这么写whie(true){cin>>N;if(N>=1 && N<100000) break;}.

后面的也是这个问题。

如有帮助,请采纳一下。

其他的先不说,你申请那么大的空间int a[100000][3];,栈空间够吗?

 

 int a[100000][3];数组定义太大了,栈空间不够,用new来创建吧