我有一个简单的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;
}
我知道这件事非常简单,但答案现在让我无法回答。
答案 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;