首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

read()函数有关问题 !

2013-11-08 
read()函数问题求助 !!本人写了一个模拟注册登录的程序,但是无论如何登录都登录失败,几经调试个人感觉是re

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函数的问题。
你在传值的时候,传了是一个结构体过去。这样子是没有用的。要传指针过去,否则你相应的数据不会保存下来。值是单向传递的。
我就不给你调程序了,大概问题应该就是我说的那个。

热点排行