鱼C论坛

 找回密码
 立即注册
查看: 1293|回复: 0

二进制文件的读取报错

[复制链接]
发表于 2014-12-27 15:02:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
两个程序,第一个程序 录入成绩,用二进制写到文件中,读取出来没有问题。
第二个程序 读取上一个程序建立的二进制文件出错。查了很久都不知道哪里的问题.... 求解答..
#include<stdio.h>
#include<stdlib.h>

void Input( struct List *p );
struct List *Creat();
int n = 0 ;

struct List
{
        int Num;
        int Score;
        struct List *Next;
}*head=NULL,*read=NULL;

void main()
{
        FILE *fp_read, *fp_write;

        read = head = Creat();
        fp_write = fopen("list", "wb");
        do
        {
                if ( !fwrite(head,sizeof(struct List), 1, fp_write) )
                {
                        printf("输入时打开文件错误");
                        return;
                }
                head = head->Next;
        }while( head );
        printf("写入成绩成功!\n");
        fclose(fp_write);
        fp_read = fopen("list", "rb");
        do
        {
                if ( !fread(read,sizeof(struct List), 1, fp_read) )
                {
                        printf("读写时打开文件错误");
                        return;
                }
                printf("排名 %d\n", read->Num);
                printf("分数 %d\n", read->Score);
                
        }while( read->Next != NULL );
        fclose(fp_read);
        system("pause");
}

struct List *Creat()
{
        struct List *p1, *p2, *head = NULL;                //p1,p2用来创建链表, head用来标记链表起始位置
        
        p1 = p2 = malloc( sizeof(struct List) );
        Input( p1 );
        while ( p1->Num != 0 )                //如果上一次读入的数据有效则继续(输入0为录入结束的标志)
        {
                n++;
                if ( n == 1 )
                {
                        head = p1;                        //标记起始位置
                        head->Next = NULL; 
                }
                else
                {
                        p2->Next = p1;                
                }
                p2 = p1;
                p1 = malloc(12);
                Input( p1 );
        }
        p2->Next = NULL;
        printf("成绩列表创建成功!!");
        return head;
}

void Input( struct List *p )
{
        printf("请输入排名:");
        scanf("%d", &p->Num);
        if ( p->Num == 0 )
        {
                return;
        }
        printf("请输入分数:");
        scanf("%d", &p->Score);
}<div class="blockcode"><blockquote>#include<stdio.h>
#include<stdlib.h>

struct List
{
        int Num;
        int Score;
        struct List *Next;
}*head=NULL;

void main()
{
        FILE *f_read;

        if ( !(f_read = fopen("list", "rb+")) )
        {
                printf("打开文件时错误");
                return;
        }
        do
        {
                if ( !fread(head,sizeof(struct List), 1, f_read) )
                {
                        printf("读入时打开文件错误");
                        break;
                }
                printf("排名 %d\n", head->Num);
                printf("分数 %d\n", head->Score);
                
        }while( head->Next != NULL );
        fclose( f_read );
        system("pause");
}

第一个程序运行正常

第一个程序运行正常

这里的问题,但不知道原因

这里的问题,但不知道原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 14:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表