为什么我不能在系统后执行(“CLS”)?

时间:2015-09-24 16:53:48

标签: c

输入密码后我无法执行。它让我在窗户上关闭了一个力量。我不擅长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");

3 个答案:

答案 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

这些都会导致问题。