为什么我的密码检查代码不能正常工作?无论输入如何,它都提供相同的输出
Why is my password checking code not working correctly? It gives same output regardless of whatsoever input
我制作了一个密码检查程序,用于检查以下条件:-
至少应该有
- 1个大写
- 1 个小写字母
- 1 个特殊字符
- 1个
- 应少于 100 个字符
就是这样。我没有给出任何下限。无论我输入什么(正确或不正确),程序都会给我相同或相似的输出,与我的屏幕截图中所附的相同或相似。
例如:- Pratik10
、pratik10
、pratikten
、pr@tiK10
,我得到相同的输出 "Password is fine and valid"
。
为什么我的程序没有正确检查定义的条件?它甚至没有正确打印密码计数器。
以下是我的代码:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <string.h>
int main()
{
char x[100];
int i;
int uc=0;
int lc=0;
int num=0;
int misc=0;
printf("enter your password\n");
scanf("%s",x);
for(i=0;i<100;i++) {
if (isalpha(x[i])) {
if (isupper(x[i])) {
uc++;
}
if (islower(x[i])) {
lc++;
}
}
if (isdigit(x[i])) {
num++;
}
else {
misc++;
}
}
printf("checking your password\n");
printf("%d uc\n",uc);
printf("%d lc\n",lc);
printf("%d num\n",num);
printf("%d misc\n",misc);
if ((uc > 0) && (lc > 0) && (num > 0) && (misc > 0)) {
printf("password is fine and valid\n");
}
else {
if(lc<=0) {
printf("lowercase character(s) missing cannot proceed without inclusion\n");
}
if(uc<=0) {
printf("uppercase character(s) missing cannot proceed without inclusion\n");
}
if(num<=0) {
printf("number(s) missing cannot proceed without inclusion\n");
}
if(misc<=0) {
printf("special character(s) missing cannot proceed without inclusion\n");
}
printf("please include all the missing parameters in combination to validate the password and try again\n\n");
}
return 0;
}
如何更正此问题?
输出:
您应该只检查用户输入的以 null 结尾的字符串。
换句话说,您应该迭代 x
直到遇到空字符。
改变这个:
for (i = 0; i < 100; i++)
为此:
for (i = 0; x[i] != 0; i++)
第二个问题是您没有正确使用 if/else
。
因此,每个不是数字的字符都被算作杂项。
改变这个:
if (isdigit(x[i]))
为此:
else if (isdigit(x[i]))
问题是您正在检查整个数组,其中大部分是未初始化的并且随机包含各种字符。
所以遇到'[=10=]'
个字符就得退出循环
其他回答都提到了主要问题。还有一个问题:if (isdigit(x[i])) {num++;}
、
前少了一个else
for(i=0; x[i]!=0; i++)
{
if (isalpha(x[i]))
{
if (isupper(x[i])) {uc++;}
if (islower(x[i])) {lc++;}
}
else if (isdigit(x[i])) {num++;} // a missing else
else {misc++;}
}
我制作了一个密码检查程序,用于检查以下条件:-
至少应该有
- 1个大写
- 1 个小写字母
- 1 个特殊字符
- 1个
- 应少于 100 个字符
就是这样。我没有给出任何下限。无论我输入什么(正确或不正确),程序都会给我相同或相似的输出,与我的屏幕截图中所附的相同或相似。
例如:- Pratik10
、pratik10
、pratikten
、pr@tiK10
,我得到相同的输出 "Password is fine and valid"
。
为什么我的程序没有正确检查定义的条件?它甚至没有正确打印密码计数器。
以下是我的代码:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <string.h>
int main()
{
char x[100];
int i;
int uc=0;
int lc=0;
int num=0;
int misc=0;
printf("enter your password\n");
scanf("%s",x);
for(i=0;i<100;i++) {
if (isalpha(x[i])) {
if (isupper(x[i])) {
uc++;
}
if (islower(x[i])) {
lc++;
}
}
if (isdigit(x[i])) {
num++;
}
else {
misc++;
}
}
printf("checking your password\n");
printf("%d uc\n",uc);
printf("%d lc\n",lc);
printf("%d num\n",num);
printf("%d misc\n",misc);
if ((uc > 0) && (lc > 0) && (num > 0) && (misc > 0)) {
printf("password is fine and valid\n");
}
else {
if(lc<=0) {
printf("lowercase character(s) missing cannot proceed without inclusion\n");
}
if(uc<=0) {
printf("uppercase character(s) missing cannot proceed without inclusion\n");
}
if(num<=0) {
printf("number(s) missing cannot proceed without inclusion\n");
}
if(misc<=0) {
printf("special character(s) missing cannot proceed without inclusion\n");
}
printf("please include all the missing parameters in combination to validate the password and try again\n\n");
}
return 0;
}
如何更正此问题?
输出:
您应该只检查用户输入的以 null 结尾的字符串。
换句话说,您应该迭代 x
直到遇到空字符。
改变这个:
for (i = 0; i < 100; i++)
为此:
for (i = 0; x[i] != 0; i++)
第二个问题是您没有正确使用 if/else
。
因此,每个不是数字的字符都被算作杂项。
改变这个:
if (isdigit(x[i]))
为此:
else if (isdigit(x[i]))
问题是您正在检查整个数组,其中大部分是未初始化的并且随机包含各种字符。
所以遇到'[=10=]'
个字符就得退出循环
其他回答都提到了主要问题。还有一个问题:if (isdigit(x[i])) {num++;}
、
else
for(i=0; x[i]!=0; i++)
{
if (isalpha(x[i]))
{
if (isupper(x[i])) {uc++;}
if (islower(x[i])) {lc++;}
}
else if (isdigit(x[i])) {num++;} // a missing else
else {misc++;}
}