虽然循环不工作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); 
+0

你有什么期望了'while'循环做,如果'uid'是不是数组中? – Beta 2013-04-24 17:08:14

您需要对行数进行限制。否则,这个调用:

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