【发布时间】:2021-01-29 17:23:37
【问题描述】:
我正在为 C++ 家庭作业编写一个简单的程序,要求我们根据这 3 个条件显示密码是有效还是无效:
- 密码必须至少包含八个字符
- 密码仅由字母和数字组成
- 密码必须至少包含两位数
当我提交作业时,它说它包含一个逻辑错误。但是,我已经检查了所有可能的输入情况,并且我的程序显示了正确性。下面是我的代码,谁能指出我的错误?
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
int main() {
cout << "Please enter a password: ";
string password;
cin >> password;
bool isValid = true;
if ( password.length() < 8 ) {
isValid = false;
}
else {
int numberOfDigits = 0;
for ( int i = 0; i < password.length(); i++ ) {
if ( !isalnum( password[i] ) ) {
isValid = false;
break;
}
if ( isdigit( password[i] ) ) {
numberOfDigits++;
}
}
if ( numberOfDigits < 2 ) {
isValid = false;
}
}
cout << ( isValid ? "Valid " : "Invalid " ) << "password" << endl;
return 0;
}
【问题讨论】:
-
对我来说看起来不错。不要以为你没有得到更多关于哪里出了问题的线索?
-
对我来说看起来不错。我要说的唯一一点是
isalnum和isdigit没有在负值上定义,所以严格来说你应该像isalnum( (unsigned char) password[i] )那样转换为unsigned char。如果这是问题所在,我会感到非常惊讶。