簡體   English   中英

即使不滿足條件,程序也會退出“while”循環

[英]Program is exitting 'while' loop even though conditions are not met

我正在嘗試簡單的練習。 顯示的代碼塊測試用戶名是否被占用以及密碼強度。

如果兩個變量都為真,程序應該退出“while”循環:

while(boolUserCheck == false && boolPwdCheck == false){}

盡管 boolUserCheck == true 和 boolPwdCheck == false,程序正在退出循環。 在我的測試中,我創建了一個免費的用戶名(即 boolUserCheck = true)並創建了一個弱密碼(即 boolPwdCheck = false)。

注意:我還沒有嘗試過 boolUserCheck == false 和 boolPwdCheck == false 的情況,因為我還沒有完成程序,所以我實際上並沒有將用戶數據存儲在任何地方以檢查使用的用戶名。

我已經檢查過我是否在需要的地方使用了相等運算符 (==) 而不是賦值運算符 (=)。 我使用了 AND 條件,因為兩者都需要為 TRUE 才能退出。 返回值是我所期望的,因此它們輸入各自的“if”語句。

while(boolUserCheck == false && boolPwdCheck == false){
    std::cout << "Username: "; gets(name);
    std::cout << "Password: "; gets(pwd);

    boolUserCheck = UserCheck(name);   // Function that checks if Username is free (returns true)
    if(boolUserCheck == false){
        std::cout << "Username taken."; std::cin.get();
    }
    else{
        boolPwdCheck = PwdCheck(pwd);   // Function that checks password strength (returns false)
        if(boolPwdCheck == false){      // Therefore enters the 'if' statement
            std::cout << "Password must contain upper and lower case and special characters: !@#$%^&*<>()";
        }
    }
    //   I added this to check the values, which are: true and false respectively
    //   And yet program exits while loop
    std::cout << "\nboolUserCheck: " << boolUserCheck << "\nboolPwdCheck: "  << boolPwdCheck;
    std::cin.get();
}

我使用了 AND 條件,因為兩者都需要為 TRUE 才能退出

TL;DR:退出條件都需要為真,這意味着運行條件必須為真,但反轉為boolUserChecked == false || boolPwdChecked == false boolUserChecked == false || boolPwdChecked == false


這是很長的路要走

讓我們根據您的條件檢查所有可能的組合
布爾用戶檢查 boolPwdCheck 結果
真的 真的 錯誤的
真的 錯誤的 錯誤的
錯誤的 真的 錯誤的
錯誤的 錯誤的 真的

這表明循環僅在兩者均為假時才運行,但您要查找的條件是:

兩者都需要為真才能退出

反之,如果其中任何一個為假,則您需要繼續運行。
也就是說,在程序邏輯中,是: boolUserChecked == true && boolPwdChecked == true退出和!(boolUserChecked == true && boolPwdChecked == true)繼續運行。
while 循環中的條件決定它是否應該繼續運行,因此您需要后者。
使用算術你可以重寫它,而無需過多的細節,到達boolUserChecked == false || boolPwdChecked == false boolUserChecked == false || boolPwdChecked == false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM