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

4

我有一个简单的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;


}

我知道这是非常简单的事情,但现在答案却让我想不起来了。


2
将其更改为 while(currentuser == -1) 注意 ==。 如果不是这样,您可以考虑实际描述问题并提出问题。 - tenfour
你的书中哪一章节清楚地区分了=运算符和==运算符?嗯... - autistic
6个回答

7
=(赋值)运算符与==(相等)运算符不同。
下面这行代码:
while(currentuser = -1){

首先将currentuser赋值为-1,然后检查currentuser是否具有非零值。这种情况永远不会发生(-1 != 0),因此循环永远不会结束。

您可能想要的是:

while(currentuser == -1){

该段代码比较了currentuser-1,只要这个比较为真,循环就会继续执行。


6

您需要更改:

while(currentuser = -1){

成为:

while(currentuser == -1){

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


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

3
你已经知道答案,但这里有一个提示,以避免将来出现类似情况。始终尝试使用

标签。这将有助于确保你的HTML代码格式正确且易于阅读。
while(-1 == currentuser){
  std::cout << "Enter user ID: ";
  std::cin >> id;
  currentuser = search(a, length, id);
}

作为这种方式
while(-1 = currentuser){
  ;
} 

将被编译器抛弃


我认为,额外的语法检查可能无法弥补可读性的损失。 - hspain

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

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


0
每当我使用while循环和布尔值时,我会尽量确保它只在大于或等于50的情况下运行,但是每当我使用while和int执行cout时,结果就像文字一样混乱,就好像while循环执行了比它应该多得多的次数。例如:
int Buses;
int People;
cin >> People;
while(People >= 50){
Buses += 1;
People -= 50;
};
cout << Buses << endl;

当我输入757时,我的结果是32782。

即使通过减去int值32767,值也会有所修复,但是对于更高的数字则不行,99是1,101是2,但是C++却说300是3,尽管它应该是6。

(我找到的解决方案:我必须声明Person和Buses变量为0,因为没有起始0时值是不同的。)

这是已修复的代码:

int Buses = 0;
int People = 0;
cin >> People;
while(People >= 50){
Buses += 1;
People -= 50;
};
cout << Buses << endl;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接