以下是我的代码:
我正在将用户输入数据与现有的2D数组进行比较。当用户输入正确的用户ID时,程序工作正常,但当有人输入错误的用户ID时,程序崩溃。
bool cust=false;
int row=0;
do
{
cout<<"enter your user id"<<endl;
cin>>uid;
cout<<"enter your password"<<endl;
cin>>upw;
while(uid!=dataarray[row][3])
{
row++;
}
if(uid==dataarray[row][3])
{
cout<<"found customer"<<endl;
cust=true;
break;
}
else
{
cout<<"No customer found"<<endl;
break;
}
}while(!cust);
答案 0 :(得分:1)
您需要限制行数。否则这个电话:
while(uid!=dataarray[row][3])
{
row++;
}
当您尝试访问dataarray [30000]时,会崩溃,而您只分配了30000个。
类似的东西:
...Allocate dataarray with dataarray[MaxNumberOfRows][MaxNumberOfColumns] ...
while ((row < MaxNumberOfRows) && (uid!= dataarray[row][3]) { row ++; }
if (row == MaxNumberOfRows) {... uid not found... }
答案 1 :(得分:0)
此循环存在问题:
while(uid!=dataarray[row][3])
{
row++;
}
如果你输入了一个在{2}矩阵中不存在的uid
,这个while循环将继续运行,直到row
超出范围,如果你尝试访问不属于你的内存,程序将崩溃二维矩阵。您还需要确保row
不会大于总行数。
答案 2 :(得分:0)
当你的uid不正确时,它会进入while循环:
while(uid!=dataarray[row][3])
{
row++;
}
如果你对row的值没有约束,程序将始终在这个循环中运行并最终崩溃。
答案 3 :(得分:0)
你做错了。 break
使程序离开while循环。
因此,您应该删除else { ... }
子句中的循环。您可以用continue
替换它,这将导致程序跳到下一次执行while
循环。
事实上,使用curl
时不需要break
值。当用户输入正确的密码时,break
会使其离开while
循环,并且不会进行额外的curl
检查。
此外,int row = 0
应位于while
循环内。
最后,您的内部while循环将导致row
索引超出dataarray
数组的范围。您必须检查row
是否超过此最大值。
我会这样纠正:
do {
cout<<"enter your user id"<<endl;
cin>>uid;
cout<<"enter your password"<<endl;
cin>>upw;
int row=0;
while(row < dataarray.size() - 1 && uid != dataarray[row][3])
{
row++;
}
if(uid==dataarray[row][3])
{
cout<<"found customer"<<endl;
break;
}
else
{
cout<<"No customer found"<<endl;
continue;
}
} while(true);