经过很长一段时间,我开始深入研究 C,并努力在简单文本文件中读取和写入结构。我调试了这个程序,发现它在文件中读取和写入垃圾值。有人能帮我吗。这是我的代码
#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 函数中,我只是声明一个结构变量并接受用户对该结构的输入并将其传递给上述两个函数。
最佳答案
我看到的第一个主要问题是:
if (temp.userName==userInfo.userName && temp.password==userInfo.password)
您正在尝试将字符串与 ==
进行比较。您需要改用 strcmp()
:
if (strcmp(temp.userName, userInfo.userName) == 0 &&
strcmp(temp.password, userInfo.password) == 0)
我不确定这是否与您得到的“垃圾”有关,但这绝对是一个错误。
就目前的代码而言,它永远不会进入 if 语句。
关于C结构读/写垃圾值到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8148338/