求大神指点

C语言 码拜 7年前 (2017-04-18) 965次浏览
题目是;编写一个密码强度判定的软件。假如有特殊字符,大小写字母和数字为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位以上就错误了,要么没有输出,要么乱输出
解决方案

80

你判断if(i>=6){  但你的i并不是输入字符串的长度,而是循环后的值(20)
你应该用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");
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求大神指点
喜欢 (0)
[1034331897@qq.com]
分享 (0)