我在很长一段时间内潜入C语言,并且正在努力阅读和编写简单文本文件中的struct。我发现了这个编程,我发现它的读取和写入文件的垃圾值。有人能帮我吗。这是我的代码
#define MAX_UserName_LEN 16
#define MAX_Password_LEN 8
#define MAX_FileName_LEN 32
struct userDetails
{
char userName[MAX_UserName_LEN];
char password[MAX_Password_LEN];
};
int registration(struct userDetails userInfo)
{
FILE *userDb;
userDb= fopen("UserDataBase.txt","a");
if(fwrite(&userInfo,sizeof(userInfo),1,userDb))
{
fclose(userDb);
return 1;
}
else
{
return 0;
}
}
int authenicate(struct userDetails userInfo)
{
FILE *userDb;
struct userDetails temp;
userDb = fopen("UserDataBase.txt","r");
while(!feof(userDb))
{
fread(&temp,sizeof(temp),1,userDb);
if (temp.userName==userInfo.userName && temp.password==userInfo.password)
{
printf("Logged In Sucessfully");
return 1;
}
}
return 0;
}
在main函数中,我只声明一个struct变量并接受用户输入到该结构中并将其传递给上述两个函数。
答案 0 :(得分:3)
我看到的第一个主要问题是:
if (temp.userName==userInfo.userName && temp.password==userInfo.password)
您正尝试将字符串与==
进行比较。您需要使用strcmp()
代替:
if (strcmp(temp.userName, userInfo.userName) == 0 &&
strcmp(temp.password, userInfo.password) == 0)
我不确定这与你得到的“垃圾”有什么关系,但这绝对是一个错误。
由于你的代码现在正好,它永远不会进入if语句。
答案 1 :(得分:0)
写一个打印用户列表的简短代码,这样你就可以看到该文件是否包含垃圾。
无论如何,密码应该以某种方式加扰。即使是愚蠢的解决方案总比没有好,只是为了使它对人眼来说不可读。比如说, for(n = 0; n< strlen(pwd); n ++)pwd [n] ^ = 0x55; 。