scanf没有响应?

时间:2013-01-03 14:30:58

标签: c

我最近开始学习C并且正在尝试编写密码数据保护程序。我正在编写一个函数,应该测试一个文件,如果不存在,则会存在password.txt,它会得到一个空值,然后让用户设置一个主密码并重复。但是,它不允许用户重复密码。有小费吗? - 干杯(记住C而不是C ++)

/*Headers*/
#include <stdio.h>
#include <stdlib.h>

#define MAX_LENGTH 99

int main(void){

    /*Variable Declaration*/
    char password[] = "Lakaka";

    masterPassword();

    printf("Welcome to Fort-Knox.");

getchar();
return 0;
}

int masterPassword(void){
    /*Password Comparison Variables*/
    char password[MAX_LENGTH];
    char password1[MAX_LENGTH];


    FILE*fp;
    if (fp == NULL){
        printf("Choose a master password:\n");
        scanf("%c", password);
        printf("Please repeat password:\n");
        scanf("%c", password1);

        if (password == password1){
            printf("Password Accepted.");
            fp = fopen("password.txt", "w+");
            printf("File Created");
            fclose(fp);
            return 0;
        }
    }


}

4 个答案:

答案 0 :(得分:3)

在读取字符串时,使用%s而非%c作为格式说明符。 %c只能读取一个字符。

答案 1 :(得分:2)

您的格式说明符错误。

这也是错误的:

if (password == password1)

这只会比较转换为指针的数组。您需要通过调用strcmp()来比较逐个字符:

if( strcmp(password, password1) == 0 )
{
  printf("match!\n");
}

答案 2 :(得分:0)

使用"%s"代替"%c"

%c仅适用于1个字符

%s用于字符串

scanf("%s", password);
scanf("%s", password1);

答案 3 :(得分:0)

你需要做

scanf("%s", password);

并比较使用:

strncmp(password,password1,MAX_LENGTH)

总是更安全:)...