虽然循环不工作C++
问题描述:
以下是我的代码:虽然循环不工作C++
我比较用户输入数据与现有的二维数组。当用户输入正确的用户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);
答
您需要对行数进行限制。否则,这个调用:
while(uid!=dataarray[row][3])
{
row++;
}
当您尝试访问数据库[30000]时将崩溃,而您只分配了30000个数据库。
喜欢的东西:
...Allocate dataarray with dataarray[MaxNumberOfRows][MaxNumberOfColumns] ...
while ((row < MaxNumberOfRows) && (uid!= dataarray[row][3]) { row ++; }
if (row == MaxNumberOfRows) {... uid not found... }
答
这个循环有问题:
while(uid!=dataarray[row][3])
{
row++;
}
如果你输入一个uid
不中你的二维矩阵中存在,这个while循环将继续运行,直到row
是出范围和程序将崩溃,如果您尝试访问不属于2D矩阵的内存。您还需要确保row
不会大于总行数。
答
当你的uid是不正确的,它会进入while循环:
while(uid!=dataarray[row][3])
{
row++;
}
,如果你有行的值没有限制,程序将始终在这个循环和崩溃运行最后。
答
你在休息时做错了什么。 A break
使程序离开while循环。
因此,您应该删除else { ... }
子句中的循环。您可以用continue
替换它,这会导致程序跳到while
循环的下一次执行。
实际上,当您使用break
时,curl
值不是必需的。当用户输入一个好的密码时,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);
你有什么期望了'while'循环做,如果'uid'是不是数组中? – Beta 2013-04-24 17:08:14