题目是;编写一个密码强度判定的软件。假如有特殊字符,大小写字母和数字为very strong;假如有大小写字母和数字为strong;假如有小写字母和数字为normal;假如只有数字为weak;假如密码小于6位输出wrong
#include<stdio.h>
void main(){
char c[20];
int i;
int a,b,h,d;
a=0;
b=0;
h=0;
d=0;
scanf(“%s”,c);
for(i=0;i<20;i++){
if((c[i]>”A”&&c[i]<“Z”)||c[i]<“0″||(c[i]>”9″&&c[i]<“A”)||(c[i]>”Z”&&c[i]<“a”)||c[i]>”z”)
a=1;
if(c[i]>=”0″&&c[i]<=”9″)
d=1;
if(c[i]>=”A”&&c[i]<=”Z”)
b=1;
if(c[i]>=”a”&&c[i]<=”z”)
h=1;
if(c[i]==”\0″)
break;
}
if(i>=6){
if(a==1&&b==1&&h==1&&d==1)
printf(“very strong”);
else
if(a==0&&b==1&&h==1&&d==1)
printf(“strong”);
else
if(a==0&&b==0&&h==1&&d==1)
printf(“normal”);
else
if(a==0&&b==0&&h==0&&d==1)
printf(“weak”);
}
if(i<6)
printf(“wrong”);
}
运行的时候,6位以下可以判断,但是6位以上就错误了,要么没有输出,要么乱输出
#include<stdio.h>
void main(){
char c[20];
int i;
int a,b,h,d;
a=0;
b=0;
h=0;
d=0;
scanf(“%s”,c);
for(i=0;i<20;i++){
if((c[i]>”A”&&c[i]<“Z”)||c[i]<“0″||(c[i]>”9″&&c[i]<“A”)||(c[i]>”Z”&&c[i]<“a”)||c[i]>”z”)
a=1;
if(c[i]>=”0″&&c[i]<=”9″)
d=1;
if(c[i]>=”A”&&c[i]<=”Z”)
b=1;
if(c[i]>=”a”&&c[i]<=”z”)
h=1;
if(c[i]==”\0″)
break;
}
if(i>=6){
if(a==1&&b==1&&h==1&&d==1)
printf(“very strong”);
else
if(a==0&&b==1&&h==1&&d==1)
printf(“strong”);
else
if(a==0&&b==0&&h==1&&d==1)
printf(“normal”);
else
if(a==0&&b==0&&h==0&&d==1)
printf(“weak”);
}
if(i<6)
printf(“wrong”);
}
运行的时候,6位以下可以判断,但是6位以上就错误了,要么没有输出,要么乱输出
解决方案
80
你判断if(i>=6){ 但你的i并不是输入字符串的长度,而是循环后的值(20)
你应该用strlen得到输入的长度
你应该用strlen得到输入的长度
#include<stdio.h>
void main(){
char c[20];
int i;
int a,b,h,d;
int len;
a=0;
b=0;
h=0;
d=0;
scanf("%s",c);
len = strlen(c);
for(i=0;i<len;i++){
if((c[i]>"A"&&c[i]<"Z")||c[i]<"0"||(c[i]>"9"&&c[i]<"A")||(c[i]>"Z"&&c[i]<"a")||c[i]>"z")
a=1;
if(c[i]>="0"&&c[i]<="9")
d=1;
if(c[i]>="A"&&c[i]<="Z")
b=1;
if(c[i]>="a"&&c[i]<="z")
h=1;
if(c[i]=="\0")
break;
}
if(len>=6){
if(a==1&&b==1&&h==1&&d==1)
printf("very strong");
else
if(a==0&&b==1&&h==1&&d==1)
printf("strong");
else
if(a==0&&b==0&&h==1&&d==1)
printf("normal");
else
if(a==0&&b==0&&h==0&&d==1)
printf("weak");
}
if(len<6)
printf("wrong");
}