注册 登录
编程论坛 C语言论坛

c语言程序设计!怎样用程序修改文件(txt文档)里面的内容!?(需要代码,不仅仅是解说)

呀呀呀呀 发布于 2018-06-22 18:00, 3410 次点击
例如:有一个文件,文件里面储存的有几个课程,其中有课程的编号、名称、性质等!其中一门课程的性质需要修改,或者另一门课程的名称要修改,该怎么弄?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct kechen
{
    int bianhao;            //课程编号
    char minchen[11];        //课程名称)
    char xinzhi[5];            //(必修 选修)课程性质
    int xueshi;                //课程总学时
    int xueshi1;            //课程授课学时
    int xueshi2;            //课程实验或者上机学时
    float xuefen;            //课程学分
    char xueqi[7];            //开课的学期)
    char shijian[10];        // 上课时间
    int renshu;             //人数上限
};

void kechen_luru();//(输入1)录入课程

int main(void)
{
    FILE *fp;

    int num,j=0,i=0;
    float xuefeng;

    struct kechen luru[1000];

    if((fp=fopen("文件.txt","a+"))==NULL)
    {
        printf("cannot open this file\n");
        exit(0);
    }
    printf("输入要修改的课程编号:");
    scanf("%d",&num);
   
    while(num!=0)//不想修改了就输入0
    {
        while(!feof(fp))
        {
//            fread(&luru[j],sizeof(struct kechen),1,fp);
            fscanf(fp, "%d %s %s %d %d %d %f %s %s %d\n", &luru[j].bianhao, luru[j].minchen, luru[j].xinzhi, &luru[j].xueshi, &luru[j].xueshi1,
                        &luru[j].xueshi2, &luru[j].xuefen, luru[j].xueqi, luru[j].shijian, &luru[j].renshu);

            if(num==luru[j].bianhao)
            {
                i++;
                printf("此编号现有信息:\n      %d %s %s %d %d %d %.1f %s %s %d\n", luru[j].bianhao, luru[j].minchen, luru[j].xinzhi, luru[j].xueshi, luru[j].xueshi1,
                    luru[j].xueshi2, luru[j].xuefen, luru[j].xueqi, luru[j].shijian, luru[j].renshu);
                printf("\n");
                printf("输入修改的信息:\n");
                printf("   编号:");
                    scanf("%d",&luru[i].bianhao);
                printf("  名称:");
                    scanf("%s",luru[i].minchen);
                printf("  性质:");
                    scanf("%s",luru[i].xinzhi);
                printf("  总学时:");
                    scanf("%d",&luru[i].xueshi);
                printf("  授课学时:");
                    scanf("%d",&luru[i].xueshi1);
                printf("  实验或上机学时:");
                    scanf("%d",&luru[i].xueshi2);
                printf("  学分:");
                    scanf("%f",&xuefeng);luru[i].xuefen=xuefeng;
                printf("  开课学期:");
                    scanf("%s",luru[i].xueqi);
                printf("  上课时间:");
                    scanf("%s",luru[i].shijian);
                printf("  人数上限:");
                    scanf("%s",&luru[i].renshu);
//到这下面就不会了!
                fprintf(fp, "%d %s %s %d %d %d %.1f %s %s %d\n", luru[j].bianhao, luru[j].minchen, luru[j].xinzhi, luru[j].xueshi, luru[j].xueshi1,
                        luru[j].xueshi2, luru[j].xuefen, luru[j].xueqi, luru[j].shijian, luru[j].renshu);
            }
            j++;
        }
        
        if(i==0)
        {
            printf("没有此课程,请重新输入编号!\n");
        }
        printf("\n");
        printf("输入要修改的课程编号:");
        scanf("%d",&num);//不想修改了就输入0
        j=0;
        i=0;
    }

    fclose(fp);
    return 0;
}


void kechen_luru()
{
   
}
3 回复
#2
吹水佬2018-06-22 19:12
先讲讲这个TXT文件是怎样创建的,最好能提供这个文件(样本)。
#3
呀呀呀呀2018-06-23 10:45
回复 2楼 吹水佬
10001 高等数学一 必修 32 32 0 10.0 2018上 周一1-2节 40
10003 高等数学三 必修 32 32 0 13.0 2018上 周三1-2节 60
10005 高等数学五 必修 32 32 0 10.0 2018上 周五1-2节 30
#4
吹水佬2018-06-23 20:22
同时用fscanf()和fprintf()读写同一个文件容易出错,读出和写入的size有可能不一样。
可以分别读一个文件、写另一个文件。
1