我制作了一个密码检查程序,它检查以下标准: -
应该至少
就是这样。我没有给出任何下限。无论我给出什么输入(正确或不正确),程序都会给我与截图中附带的相同或类似的输出。
例如: - 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;
}
如何解决这个问题?
输出:
答案 0 :(得分:6)
问题是你正在检查整个数组,这个数组大多是未初始化的,并且随机包含所有类型的字符。
因此,当遇到'\0'
字符时,您必须退出循环。
答案 1 :(得分:4)
您应该只检查用户输入提供的以null结尾的字符串。
换句话说,您应该迭代x
,直到遇到空字符。
改变这个:
for (i = 0; i < 100; i++)
对此:
for (i = 0; x[i] != 0; i++)
第二个问题是您没有正确使用if/else
。
因此,每个不是数字的字符都被计为misc。
改变这个:
if (isdigit(x[i]))
对此:
else if (isdigit(x[i]))
答案 2 :(得分:4)
其他答案提到了主要问题。还有一个问题:else
之前缺少if (isdigit(x[i])) {num++;}
,
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++;}
}