输入密码后我无法执行。它让我在窗户上关闭了一个力量。我不擅长C.任何人都可以帮助我?
int i;
char user, pass[4], pwd, a;
printf("insert Username : ");
scanf("%s", &user);
printf("insert Password <4 char> : ");
scanf("%c", &pass);
for(i=0;i<4;i++)
{
pwd = getch();
pass[i] = pwd;
pwd = '*' ;
printf("%c",pwd);
}
pass[i] = '\0';
printf("\n");
system("pause");
system("CLS");
printf("username %s", user);
getch();
system("pause");
答案 0 :(得分:3)
当输出到终端时,默认情况下stdio是行缓冲的。因此,在打印换行符(或打印足以填充缓冲区)或显式刷新缓冲区之前,您不会看到printf()
的输出。所以改为:
printf("username %s\n", user);
或在fflush(stdout)
之后致电printf
。
CLS
与此问题无关。
答案 1 :(得分:1)
您的字符串pass[4]
太短了。循环之后
for(i=0;i<4;i++)
var i
将是4
。然后使用
pass[i] = '\0';
未定义的行为,很容易破坏系统。您的格式化方法也在char和string之间反转。
scanf("%s", &user);
...
scanf("%c", &pass);
这些应该是
scanf("%c", &user);
...
scanf("%s", pass); // don't use the & here
答案 2 :(得分:0)
// char user[6];
scanf("%s", &user); // scanf("%5s",user);
user
是char变量。它不能包含多个字符。使用char数组。
scanf("%c", &pass); // use this scanf("%3s",pass);
pass
是char数组而不是char变量。为此使用说明符%s
。
这些都会导致问题。