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

A simple C++ While loop not working

本文关键字:c++ While 循环 不起作用 简单 一个      更新时间:2023-10-16

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

}
我知道这很简单,但是我现在想不起来。

=(赋值)操作符与==(相等)操作符不同。

行:

while(currentuser = -1){

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

你的意思可能是:

while(currentuser == -1){

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

您需要更改:

while(currentuser = -1){

:

while(currentuser == -1){

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

尝试== -1代替= -1

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

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

as this way

while(-1 = currentuser){
  ;
} 

将被编译器抛出

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

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

在Linux上输入EOT (control-D), control-Z?(在windows上)将引发std::cin的文件结束条件。id的值不会被改变,查找可能会继续返回-1。结果是一个无限循环,其中包含大量对std::cout的吐槽。

解决这个问题的一种方法是在std::cin >> id;失败时将break排除在循环之外。例如:if (! (std::cin >> id)) break;

每当我使用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。

(我发现我的解决方案:我必须用0声明Person和Buses变量,因为没有开始的0值是不同的。)

这是固定代码:

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