0

下面是我的代码:

我正在将用户输入数据与现有的二维数组进行比较。当用户输入正确的用户 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);
4

4 回答 4

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... } 
于 2013-04-24T17:08:55.060 回答
0

你在休息时做错了什么。Abreak使程序退出 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);
于 2013-04-24T17:15:49.433 回答
0

这个循环有问题:

 while(uid!=dataarray[row][3])
 {
    row++;
 }

如果您输入uid2D 矩阵中不存在的一个,则此 while 循环将继续运行,直到row超出范围,如果您尝试访问不属于 2D 矩阵的内存,程序将崩溃。您还需要确保它row不会大于总行数。

于 2013-04-24T17:09:40.547 回答
0

当您的 uid 不正确时,它将进入 while 循环:

while(uid!=dataarray[row][3])
        {
            row++;
        }

如果你对 row 的值没有限制,程序会一直在这个循环中运行,最后会崩溃。

于 2013-04-24T17:09:53.217 回答