C++ 一个简单的C++;当循环不工作时

C++ 一个简单的C++;当循环不工作时,c++,while-loop,C++,While Loop,我有一个简单的while循环,我正试图实现它,但对于我的生命来说,我无法找出我缺少了什么。我已将currentuser在顶部初始化为-1 while(currentuser = -1){ cout << "Enter user ID: "; cin >> id; currentuser = search(a, length, id); } while(currentuser=-1){ cout>id; currentuser=搜索(a、长度、id

我有一个简单的while循环,我正试图实现它,但对于我的生命来说,我无法找出我缺少了什么。我已将currentuser在顶部初始化为-1

while(currentuser = -1){
    cout << "Enter user ID: ";
    cin >> id;
    currentuser = search(a, length, id);
}
while(currentuser=-1){
cout>id;
currentuser=搜索(a、长度、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;


}
int搜索(用户a[],int长度,字符串userID){
用户u;
字符串tempid;
int templegnth;//我暂时忽略长度,因为稍后将使用它

对于(int i=0;i尝试
==-1
而不是
=-1
=
(赋值)运算符与
==
(相等)运算符不同

该行:

while(currentuser = -1){
首先将
-1
分配给
当前用户
,然后检查
当前用户
是否有非零值。情况总是这样(
-1!=0
),因此循环永远不会结束

你的意思可能是:

while(currentuser == -1){
它将当前用户
-1
进行比较,并继续循环,只要该比较为真。

您需要更改:

while(currentuser = -1){
将是:

while(currentuser == -1){

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

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

while(currentuser == -1){
  std::cout << "Enter user ID: ";
  std::cin >> id;
  currentuser = search(a, length, id);
}
while(当前用户==-1){
std::cout>id;
currentuser=搜索(a、长度、id);
}
键入EOT(Linux框上的control-D,windows上的control-Z)将引发
std::cin
的文件结束条件。不会更改
id
的值,并且查找可能会继续返回-1。结果是一个无限循环,有大量喷到
std::cout


解决此问题的一种方法是,当
std::cin>>id;
失败时,将
从循环中中断出来。例如,
如果(!(std::cin>>id))中断;
您已经得到了答案,但下面是如何在将来避免它的提示。 始终尝试使用

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

将被编译器抛出

将其更改为
while(currentuser==-1)<代码>注释>代码>=< /代码>。如果不是这样,你可以考虑实际描述问题是什么,问一个问题。你的书的哪一章清楚地区分了=运算符和=操作符?HMM……我会说,可读性的损失可能不会被额外的语法检查所抵消。
while(-1 = currentuser){
  ;
}