提问人:Eugene Irwin 提问时间:8/16/2023 最后编辑:Ted LyngmoEugene Irwin 更新时间:8/16/2023 访问量:66
我的布尔表达式计算不正确,需要帮助在我的代码中找到疏忽 [duplicate]
My boolean expression is not evaluating correctly and need help finding the oversight in my code [duplicate]
问:
问题:遍历 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;
}
答:
3赞
Barmar
8/16/2023
#1
您没有正确计算位数。codeWord
您需要初始化为 .然后在循环中,只要数字是数字,就将 的字符添加到它上面。number
0
codeWord
1
那么你不应该检查它的大小,只需检查它的值。
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
一个额外的预防措施,以防负面因素偷偷溜进去:char
codeWord
isdigit(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
它不是“数字中的字节数”,而是类型的大小
评论
sizeof(number)
不告诉 中有多少位数字。它是数据类型中的字节数,与值无关。number
int
sizeof(number)
没有做你所期望的number
i=number;
number = i;
i=number;
在代码中,没有初始化的位置number