一个简单的C ++ While循环不起作用

时间:2011-09-25 14:09:41

标签: c++ while-loop

我有一个简单的while循环我正在尝试实现但是对于我的生活无法弄清楚我缺少什么。我有currentuser初始化在顶部-1 -

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;


}

我知道这件事非常简单,但答案现在让我无法回答。

5 个答案:

答案 0 :(得分:7)

=(赋值)运算符与==(相等)运算符不同。

该行:

while(currentuser = -1){

首先将-1分配给currentuser,然后检查currentuser是否具有非零值。总是如此(-1 != 0),所以循环永远不会结束。

你的意思是:

while(currentuser == -1){

currentuser-1进行比较,只要该比较为真,就会继续循环。

答案 1 :(得分:6)

您需要更改:

while(currentuser = -1){

是:

while(currentuser == -1){

目前,每次循环运行时,您都会将currentuser分配给-1,而不是检查它是否仍然分配给该值。

答案 2 :(得分:4)

尝试使用== -1代替= -1

答案 3 :(得分:3)

你已经得到了答案,但这里有一个关于如何在将来避免它的提示。 总是尝试使用

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

就这样

while(-1 = currentuser){
  ;
} 

将被编译器抛出

答案 4 :(得分:0)

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

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

键入EOT(Linux上的control-D,Windows上的control-Z?)将引发std::cin文件结束条件。 id的值不会更改,并且查找可能会继续返回-1。结果是一个无限循环,有大量的喷射到std::cout

解决此问题的一种方法是在break失败时将std::cin >> id;移出循环。例如,if (! (std::cin >> id)) break;