read()函数问题 求助 !!
本人写了一个模拟注册登录的程序,但是无论如何登录都登录失败,几经调试个人感觉是read()函数没读到东西,希望大家能帮我分析下问题所在,代码如下
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
typedef struct Log
{
char name[20];
char passwd[20];
char email[20];
}Log;
int signup(Log log,int fd)
{
scanf("%*c");
printf("请输入用户名:");
scanf("%s",log.name);
char temp[20];
int flag = 0;
while(!flag)
{
printf("请输入密码:");
scanf("%s",log.passwd);
printf("请再次输入密码:");
scanf("%s",temp);
if(strcmp(log.passwd,temp))
{
flag = 0;
}
else break;
}
printf("请输入邮箱:");
scanf("%s",log.email);
int res = write(fd,&log,sizeof(log));
if(res == -1) perror("write"),exit(-1);
return 1;
}
int Loggin(Log log,int fd)
{
printf("请输入用户名:");
scanf("%s",log.name);
printf("请输入密码:");
scanf("%s",log.passwd);
int len = lseek(fd,0,SEEK_END)/sizeof(log);
struct Log temp[len];
int i = 0;
int res = read(fd,&temp[i],sizeof(Log));
if(res == -1) perror("read"),exit(-1);
printf("%s,%s\n",temp[i].name,temp[i].passwd);
while(res)
{
i++;
res = read(fd,&temp[i],sizeof(Log));
if(res == -1) perror("read"),exit(-1);
}
i = 0;
for(i=0;i<len-1;i++)
{
if(strcmp(log.name,temp[i].name) == 0 && strcmp(log.passwd,temp[i].passwd) == 0)
{
return 1;
break;
}
}
return 0;
}
int main()
{
int fd = open("log",O_CREAT|O_RDWR|O_APPEND,0666);
if(fd == -1) perror("open"),exit(-1);
int select;
struct Log log;
printf("注册按1,登陆按2:");
scanf("%d",&select);
if(select == 1)
{
signup(log,fd);
if(signup) printf("注册成功!\n");
else printf("注册失败!\n");
}
else if(select == 2)
{
Loggin(log,fd);
if(!Loggin) printf("登陆成功!\n");
else printf("登陆失败!\n");
}
else printf("输入错误!\n");
close(fd);
return 0;
}
[解决办法]
read 和write函数换一个检查返回值的方式!不要判断 -1 ,检查成功写入数据和读的数据!
[解决办法]
我目测是这样的。
不是read函数的问题。
你在传值的时候,传了是一个结构体过去。这样子是没有用的。要传指针过去,否则你相应的数据不会保存下来。值是单向传递的。
我就不给你调程序了,大概问题应该就是我说的那个。