| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1477 人关注过本帖
标题:文件输入输出的问题
只看楼主 加入收藏
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:145
专家分:187
注 册:2017-10-26
结帖率:66.67%
收藏
 问题点数:0 回复次数:3 
文件输入输出的问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define XS 5

struct Student
{
    int xuehao;
    char xingming[10];
    int yuwen;
    int shuxue;
    int yingyu;
    int pingjun;
}xuesheng[XS];
void paixu(struct Student a[], int n)
{
    int i, j;
    for(i = 0; i < XS - 1; i++)
    {
        for(j = i + 1; j < XS; j++)
        {
            if(a[i].pingjun > a[j].pingjun)
            {
                struct Student b;
                b.xuehao = a[i].xuehao;
                strcpy(b.xingming, a[i].xingming);
                b.yuwen = a[i].yuwen;
                b.shuxue = a[i].shuxue;
                b.yingyu = a[i].yingyu;
                b.pingjun = a[i].pingjun;
                a[i].xuehao = a[j].xuehao;
                strcpy(a[i].xingming, a[j].xingming);
                a[i].yuwen = a[j].yuwen;
                a[i].shuxue = a[j].shuxue;
                a[i].yingyu = a[j].yingyu;
                a[i].pingjun = a[j].pingjun;
                a[j].xuehao = b.xuehao;
                strcpy(a[j].xingming, b.xingming);
                a[j].yuwen = b.yuwen;
                a[j].shuxue = b.shuxue;
                a[j].yingyu = b.yingyu;
                a[j].pingjun = b.pingjun;
            }
        }
    }
}

void ceshi(void)   //用这个函数测试读取文件失败,但是我重新写了一个cpp文件测试却是成功的.高手来解答下.
{
    struct Student
    {
        int xuehao;
        char xingming[10];
        int yuwen;
        int shuxue;
        int yingyu;
        int pingjun;
    }xue[XS];
    FILE *fp;
    if((fp = fopen("stu_sort.dat","rb")) == NULL)
    {
        printf("打开文件失败.\n");
        exit(0);
    }
    for(int i = 0; i < XS; i++)
    {
        if(fread(&xue[i],sizeof(xue[i]), 1, fp) != 1)
        {
            printf("xue[%d]提取数据失败.\n",i);
        }
    }
    for(int i = 0; i < XS; i++)
        printf("学号:%d, 姓名:%-6s, 语文成绩:%d, 数学成绩:%d, 英语成绩:%d, 平均分:%d.\n",xue[i].xuehao,xue[i].xingming,xue[i].yuwen,xue[i].shuxue,xue[i].yingyu,xue[i].pingjun);
    fclose(fp);
}

int main()
{
    FILE *fp;
    if((fp = fopen("stud.dat", "rb")) == NULL)
    {
        printf("打开文件失败.\n");
        exit(0);
    }
    for(int i = 0; i < XS; i++)
    {
        if(fread(&xuesheng[i], sizeof(xuesheng[i]), 1, fp) != 1)
        {
            printf("读取文件数据失败.\n");
        }
    }
    for(int i = 0; i < XS; i++)
        printf("学号:%d, 姓名:%-6s, 语文成绩:%d, 数学成绩:%d, 英语成绩:%d, 平均分:%d.\n",xuesheng[i].xuehao,xuesheng[i].xingming,xuesheng[i].yuwen,xuesheng[i].shuxue,xuesheng[i].yingyu,xuesheng[i].pingjun);

    paixu(xuesheng, XS);

    fclose(fp);

    if((fp = fopen("stu_sort.dat", "wb")) == NULL)
    {
        printf("打开文件失败.\n");
        exit(0);
    }

    for(int i = 0; i < XS; i++)
    {
        if(fwrite(&xuesheng[i], sizeof(xuesheng[i]), 1, fp) == 1)
        {
            printf("xuesheng[%d]数据拷贝成功.\n",i);
        }

    }
    ceshi();
    fclose(fp);
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: 文件 int for 失败 printf 
2018-03-24 10:18
loboce
Rank: 2
等 级:论坛游民
威 望:1
帖 子:26
专家分:96
注 册:2014-6-7
收藏
得分:0 
在main函数里,你第二次使用fopen()打开文件还没使用fclose()对其关闭,接着又在ceshi函数里对其进行打开操作。没关闭又怎么打开?这个程序请注意main函数和ceshi函数的fp是两个不同的文件指针。他们的作用域不同
2018-03-25 22:26
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
额。。。你写的是c,不是c++.为何用cpp格式?
main函数里,打开了这个stu_sort.dat文件。这时,这个文件已经被锁。操作完没关闭。接着你又调用cesh自定义函数。。又打开这个文件操作。。这里肯定操作失败。因为上个操作的文件关闭位置被你写在后面了。

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2018-03-25 23:29
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
精简一下看看:
void ceshi(void)
{
    //FILE *fp;
    //if((fp = fopen("stu_sort.dat","rb")) == NULL) //stu_sort.dat已经在用

        if(fread(&xue[i],sizeof(xue[i]), 1, fp) != 1)

    //fclose(fp);
}

int main()
{
    FILE *fp;
    if((fp = fopen("stud.dat", "rb")) == NULL)

        if(fread(&xuesheng[i], sizeof(xuesheng[i]), 1, fp) != 1)

    fclose(fp);

    if((fp = fopen("stu_sort.dat", "wb")) == NULL)

        if(fwrite(&xuesheng[i], sizeof(xuesheng[i]), 1, fp) == 1)

    ceshi();

    fclose(fp);
   
}
2018-03-26 05:12
快速回复:文件输入输出的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030184 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved