一个简单的C++虽然循环不工作
我有一个简单的while循环,我试图实现,但对于我的生活无法弄清楚我失踪。我在上面已经currentuser初始化为-1一个简单的C++虽然循环不工作
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;
}
我知道它的东西很简单,但答案逃脱我现在。
的=
(分配)运算符是不一样的==
(equality)运算符。
线:
while(currentuser = -1){
第一受让人-1
到currentuser
,然后检查是否currentuser
具有非零值。这将永远是这种情况(-1 != 0
),所以循环将永远不会结束。
您可能意味着这个:
while(currentuser == -1){
与之相比currentuser
到-1
,只要是比较虚继续循环。
你需要改变:
while(currentuser = -1){
是:
while(currentuser == -1){
目前要分配currentuser
到-1
您的每一次循环运行,而不是检查,如果它仍然分配给该值。
upvote,因为它是正确的答案 – Nick
即使将=更改为==,循环仍然存在问题。
while(currentuser == -1){
std::cout << "Enter user ID: ";
std::cin >> id;
currentuser = search(a, length, id);
}
键入的EOT(在Linux中控制d,控制-Z?上视窗)将提高的文件条件std::cin
的末端。 id
的值不会改变,并且查找可能会继续返回-1。其结果是一个无限循环,有很多spew到std::cout
。
解决此问题的一种方法是当std::cin >> id;
发生故障时,break
退出循环。例如,if (! (std::cin >> id)) break;
你已经得到了答案,但这里有一条关于如何避免它的提示。 始终尝试使用
while(-1 == currentuser){
std::cout << "Enter user ID: ";
std::cin >> id;
currentuser = search(a, length, id);
}
因为这样
while(-1 = currentuser){
;
}
将由编译
我会争辩说,可读性的损失可能不会被额外的语法检查所抵消。 – hspain
将其更改为'而被抛出(currentuser == -1)''注意'== 。如果不是这样,你可能会考虑实际描述问题并提出问题。 – tenfour
你书中的哪一章清楚地区分=操作符和==操作符?嗯... – Sebivor