В следующем коде, когда одна и та же строка вводится в массивы «pass» и «repass», строка в «repass» увеличивается вдвое. Например, если входная строка в «pass» и «repass» является aaaaaaaa, тогда строка в «repass» становится aaaaaaaaaaaaaaaa, из-за которой strcmp()
дает отрицательный ответ.Почему печать входного буфера приводит к неожиданному выводу?
Может ли кто-нибудь помочь и объяснить причину этого?
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char user_name[20],pass[8],repass[8];
int i=0,c=0,tr=1;//tr for no of try(should less than 3)
clrscr();
puts("enter user name");
gets(user_name);
printf("\n\n\n\n");
for(tr=1;tr<=3;tr++)
{
puts("\n\nenter password");
while(i<8)
{
pass[i] = getch();
putchar('*');
i++;
}
printf("\n\n\n\nplease reenter the password\n\n");
i=0;
while(i<8)
{
repass[i]=getch();
putchar('*');
i++;
}
c=strcmp(pass, repass);
printf("c=%d", c);
if(strcmp(pass,repass)==0)
c=0;
else
c++;
if(c==0)
{
printf("\n\n\t****\vsuccessful login*********** ");
break;
}
else
printf("\n\nsorry password did not match");
}
if(tr>3)
puts("\n\nlogin failed");
//printf("%s %s",pass,repass);
getch();
}
Отклоните свой код; рекомендация для SO - 4 пробела на уровне, без вкладок. –
Кроме того, разве они не учат не использовать 'gets' ??? –