我的布尔表达式计算不正确,需要帮助在我的代码中找到疏忽 [duplicate]

My boolean expression is not evaluating correctly and need help finding the oversight in my code [duplicate]

提问人:Eugene Irwin 提问时间:8/16/2023 最后编辑:Ted LyngmoEugene Irwin 更新时间:8/16/2023 访问量:66

问:

问题:遍历 cin 密码并将密码中的整数实例保存为整数变量(number)后。我使用 if 语句来搜索条件:如果密码中有 5 个或更少的数字并且密码长度小于 10 个字符。当只有一个条件为真而不是两个条件都为真时,该语句的计算结果似乎为真。

我得到的结果:

测试输入未正确评估

问题:声明一个名为 goodPassword 的布尔变量。如果 codeWord 包含的数字不超过 5 位且 codeWord 的长度小于 10 位,则使用 goodPassword 输出“Valid”,否则输出“Invalid”。

我的代码

#include <iostream>
using namespace std;

int main() {
    string codeWord;
    bool goodPassword;

    unsigned int i;

    int number;
    cin >> codeWord;
   
    for (i=0; i<codeWord.size(); ++i){
        //check each index for number and declare size limit
        if( isdigit(codeWord[i]) ){
            i=number;
        }  
    } /* Type your additional code here */
   
    if ((sizeof(number) < 6) && (codeWord.size()<10)){
        goodPassword = true;
    }
    else {
        goodPassword=false;
    }
         
    if (goodPassword) {
        cout << "Valid" << endl;
    }
    else {
        cout << "Invalid" << endl;
    }
   
    return 0;
}
C++ IF语句 逻辑运算符

评论

2赞 Barmar 8/16/2023
sizeof(number)不告诉 中有多少位数字。它是数据类型中的字节数,与值无关。numberint
0赞 OldProgrammer 8/16/2023
sizeof(number)没有做你所期望的
0赞 Barmar 8/16/2023
在使用它之前,您从未分配过任何东西。 是倒退的,应该是numberi=number;number = i;
0赞 463035818_is_not_an_ai 8/16/2023
i=number;在代码中,没有初始化的位置number

答:

3赞 Barmar 8/16/2023 #1

您没有正确计算位数。codeWord

您需要初始化为 .然后在循环中,只要数字是数字,就将 的字符添加到它上面。number0codeWord1

那么你不应该检查它的大小,只需检查它的值。

    int number = 0;
    cin >> codeWord;
   
    for (i=0; i<codeWord.size(); ++i){
        //check each index for number and declare size limit
        if( isdigit(codeWord[i]) ){
            number++;
        }  
    } /* Type your additional code here */
   
    if ((number < 6) && (codeWord.size()<10)){
        goodPassword = true;
    }
    else {
        goodPassword=false;
    }

评论

0赞 Ted Lyngmo 8/16/2023
一个额外的预防措施,以防负面因素偷偷溜进去:charcodeWordisdigit(static_cast<unsigned char>(codeWord[i]))
-1赞 DamilolaOwonibi 8/16/2023 #2

大小未按预期工作sizeof 函数检查数字中的字节数而不是长度,通过将其转换为字符串并计算字符数来获取数字的长度。

所以代码将是

#include <iostream>
using namespace std;

int main() {
    string codeWord;
    bool goodPassword = false; // Initialize to false

    unsigned int i;
    string numberString; // Store digits as a string

    cin >> codeWord;

    for (i = 0; i < codeWord.size(); ++i) {
        // Check each index for a number and store digits in numberString
        if (isdigit(codeWord[i])) {
            numberString += codeWord[i];
        }
    }

    // Convert numberString to an integer
    int number = stoi(numberString);

    if (numberString.size() < 6 && codeWord.size() < 10) {
        goodPassword = true;
    }

    if (goodPassword) {
        cout << "Valid" << endl;
    } else {
        cout << "Invalid" << endl;
    }

    return 0;
}

评论

1赞 463035818_is_not_an_ai 8/16/2023
它不是“数字中的字节数”,而是类型的大小