一个简单的C++虽然循环不工作

问题描述:

我有一个简单的while循环,我试图实现,但对于我的生活无法弄清楚我失踪。我在上面已经currentuser初始化为-1一个简单的C++虽然循环不工作

while(currentuser = -1){ 
    cout << "Enter user ID: "; 
    cin >> id; 
    currentuser = search(a, length, id); 
} 

我的搜索功能是这样的:

int search (User a[ ], int length, string userID){ 
    User u; 
    string tempid; 
    int templegnth; //I ignore length for now as I will use it later 
    for(int i=0; i<50; i++){ 
     tempid = a[i].getID(); 
     templegnth = tempid.length(); 
     if((tempid == userID)){ 
      return i; 
     } 
    } 
    return -1; 


} 

我知道它的东西很简单,但答案逃脱我现在。

+2

将其更改为'而被抛出(currentuser == -1)''注意'== 。如果不是这样,你可能会考虑实际描述问题并提出问题。 – tenfour

+0

你书中的哪一章清楚地区分=操作符和==操作符?嗯... – Sebivor

=(分配)运算符是不一样的==(equality)运算符。

线:

while(currentuser = -1){ 

第一受让人-1currentuser,然后检查是否currentuser具有非零值。这将永远是这种情况(-1 != 0),所以循环将永远不会结束。

您可能意味着这个:

while(currentuser == -1){ 

与之相比currentuser-1,只要是比较虚继续循环。

尝试== -1而不是= -1

+0

upvote,因为它是正确的答案 – Nick

你需要改变:

while(currentuser = -1){ 

是:

while(currentuser == -1){ 

目前要分配currentuser-1您的每一次循环运行,而不是检查,如果它仍然分配给该值。

+0

upvote,因为它是正确的答案 – Nick

即使将=更改为==,循环仍然存在问题。

while(currentuser == -1){ 
    std::cout << "Enter user ID: "; 
    std::cin >> id; 
    currentuser = search(a, length, id); 
} 

键入的EOT(在Linux中控制d,控制-Z?上视窗)将提高的文件条件std::cin的末端。 id的值不会改变,并且查找可能会继续返回-1。其结果是一个无限循环,有很多spew到std::cout

解决此问题的一种方法是当std::cin >> id;发生故障时,break退出循环。例如,if (! (std::cin >> id)) break;

你已经得到了答案,但这里有一条关于如何避免它的提示。 始终尝试使用

while(-1 == currentuser){ 
    std::cout << "Enter user ID: "; 
    std::cin >> id; 
    currentuser = search(a, length, id); 
} 

因为这样

while(-1 = currentuser){ 
    ; 
} 

将由编译

+0

我会争辩说,可读性的损失可能不会被额外的语法检查所抵消。 – hspain