题目是;编写一个密码强度判定的软件。假如有特殊字符,大小写字母和数字为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"); }