不多说,直接运行一下,就知道效果了。
# include <stdio.h>//int char 输入容易出问题 下面的代码可以解决这个问题
# include <conio.h>
# define N 10 //如果要录入X个字节则 N=X
int user_password(char *A,int min,int max,int F);//直到用户输入的字符串长度在[min,max]之间时 函数结束 返回字符串A的长度
int main()
{
char A[N+1],B[2*N+1];
printf("用户名:");
user_password(A,2,N,0);
printf("密 码:");
user_password(B,6,2*N,1);
printf("用户名:");
puts(A);
printf("密 码:");
puts(B);
return 0;
}
int user_password(char *A,int min,int max,int F)//F=0录入密码 否则 录入 用户名
{
int B,C,D;
char S[][7]={"用户名","密码"};
do
{
B=max+printf("[");for(C=1; C<B; C++)printf(" ");printf("]");
while(B--)printf("\b");
B=0;
while((C=getch())!='\r')
if(C>='0'&&C<='9'||C>='a'&&C<='z'||C>='A'&&C<='Z'||C=='_'||C==8)
{
if(C!=8&&B<max)
{
if(F)printf("*");//密码
else printf("%c",C);//用户名
A[B++]=C;
}
else if(C==8&&B>0)
{
printf("\b \b");
B--;
}
else if(B>=max)
{
D=printf("]%s长度:[%d,%d]!",S[F],min,max);
for(C=0; C<60000000; C++);
while(D-->1)printf("\b \b");
printf("\b");
}
}
A[B]=0;
if(B<min)
{
for(C=B; C<max; C++)printf(" ");
D=max+printf("]%s长度:[%d,%d]!",S[F],min,max);
for(C=0; C<60000000; C++);
while(D--)printf("\b \b");
printf("\b");
}
}while(B<min);
printf("\n");
return B;
}