2011-09-25 78 views
4

我有一個簡單的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; 


} 

我知道它的東西很簡單,但答案逃脫我現在。

+2

將其更改爲'而被拋出(currentuser == -1)''注意'== 。如果不是這樣,你可能會考慮實際描述問題並提出問題。 – tenfour

+0

你書中的哪一章清楚地區分=操作符和==操作符?嗯... – Sebivor

回答

7

=(分配)運算符是不一樣的==(equality)運算符。

線:

while(currentuser = -1){ 

第一受讓人-1currentuser,然後檢查是否currentuser具有非零值。這將永遠是這種情況(-1 != 0),所以循環將永遠不會結束。

您可能意味着這個:

while(currentuser == -1){ 

與之相比currentuser-1,只要是比較虛繼續循環。

4

嘗試== -1而不是= -1

+0

upvote,因爲它是正確的答案 – Nick

6

你需要改變:

while(currentuser = -1){ 

是:

while(currentuser == -1){ 

目前要分配currentuser-1您的每一次循環運行,而不是檢查,如果它仍然分配給該值。

+0

upvote,因爲它是正確的答案 – Nick

0

即使將=更改爲==,循環仍然存在問題。

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;

3

你已經得到了答案,但這裏有一條關於如何避免它的提示。 始終嘗試使用

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

因爲這樣

while(-1 = currentuser){ 
    ; 
} 

將由編譯

+0

我會爭辯說,可讀性的損失可能不會被額外的語法檢查所抵消。 – hspain