while循环不起作用c ++

时间:2013-04-24 17:04:59

标签: c++ for-loop while-loop do-while

以下是我的代码:

我正在将用户输入数据与现有的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);

4 个答案:

答案 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);