标题:求助,关于文件写入的问题
只看楼主
爱之梦魇
Rank: 2
等 级:论坛游民
帖 子:21
专家分:30
注 册:2018-2-2
结帖率:33.33%
已结贴  问题点数:20 回复次数:16 
求助,关于文件写入的问题
就是编程要求要输入课程信息并存入文件中
但我怎么都无法把信息成功写入文件,求教各位大神有什么解决方法吗?

下面这一段是我对 文件写入 的代码
void csave(int n)//课程信息录入
{
    FILE *fp;
    int i;
    if((fp=fopen("E:\\cdata.txt","wb"))==NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
    for(i=0;i<n;i++)
        if(fwrite(&course[i],sizeof(struct Course),1,fp)!=1);
            printf("file write error\n");
    fclose(fp);   
}

下面是我对 course 结构体的定义
struct Course{
    int no;//课程编号
    char name[50];//课程名称
    char major[50];//课程性质(专业)
    int time;//学时
    int stime;//授课学时
    int ttime;//实验学时
    int score;//学分
    char ktime[50];//开课学期
}course[100];

下面是在主函数中对 课程信息的输入
printf("\n请输入课程编号:");
scanf("%d",&course[p].no);
printf("请输入课程名称:");
scanf("%s",&course[p].name);
printf("请输入课程性质:");
scanf("%s",&course[p].major);
printf("请输入学时:");
scanf("%d",&course[p].time);
printf("请输入授课学时:");
scanf("%d",&course[p].stime);
printf("请输入实验学时:");
scanf("%d",&course[p].ttime);
printf("请输入学分:");
scanf("%d",&course[p].score);
printf("请输入开课学期:");
scanf("%s",&course[p].ktime);
csave(n);

搜索更多相关主题的帖子: 输入 课程 printf Course scanf 
2018-02-02 21:40
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:10 
scanf("%s",&course[p].name);  //字符串赋值不加  &

早知做人那么辛苦!  当初不应该下凡
2018-02-02 22:01
爱之梦魇
Rank: 2
等 级:论坛游民
帖 子:21
专家分:30
注 册:2018-2-2
得分:0 
回复 2楼 炎天
并不是这个问题
2018-02-02 22:10
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:0 
回复 3楼 爱之梦魇
上完整代码

早知做人那么辛苦!  当初不应该下凡
2018-02-02 22:18
爱之梦魇
Rank: 2
等 级:论坛游民
帖 子:21
专家分:30
注 册:2018-2-2
得分:0 
回复 4楼 炎天
我没把这题的功能写完,你凑合看吧
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
struct Course{
    int no;//课程编号
    char name[50];//课程名称
    char major[50];//课程性质(专业)
    int time;//学时
    int stime;//授课学时
    int ttime;//实验学时
    int score;//学分
    char ktime[50];//开课学期
}course[100];
struct Student{
    int num;//学号
    char name[50];//姓名
    char major[50];//专业
    char grade[50];//年级
}student[1000];
void menu();
void menu1();
void menu2();
void menu()//主菜单
{
    int i;
    for(i=1;i<=3;i++)
            printf("\n");
    printf("          ********************学生选课系统*********************\n");
    printf("          *                                                   *\n");
    printf("          *                  请选择人员身份                   *\n");
    printf("          *                                                   *\n");
    printf("          *                    1、管理员                      *\n");
    printf("          *                                                   *\n");
    printf("          *                    2、学生                        *\n");
    printf("          *                                                   *\n");
    printf("          *****************************************************\n");
}
void menu1()//管理员菜单
{
    int i;
    for(i=1;i<=3;i++)
            printf("\n");
    printf("          *********************管理员界面**********************\n");
    printf("          *                                                   *\n");
    printf("          *  1、初始化课程信息             2、初始化学生信息  *\n");
    printf("          *                                                   *\n");
    printf("          *  3、课程信息浏览               4、课程信息查询    *\n");
    printf("          *                                                   *\n");
    printf("          *  5、选修情况查询               0、退出界面        *\n");
    printf("          *                                                   *\n");
    printf("          *****************************************************\n");
}
void menu2()//学生菜单
{
    printf("          **********************学生界面***********************\n");
    printf("          *                                                   *\n");
    printf("          *                                                   *\n");
    printf("          *                                                   *\n");
    printf("          *  1、课程信息浏览               2、课程选择        *\n");
    printf("          *                                                   *\n");
    printf("          *                                                   *\n");
    printf("          *                                                   *\n");
    printf("          *****************************************************\n");
}
void csave(int n)//课程信息录入
{
    FILE *fp;
    int i;
    if((fp=fopen("E:\\cdata.txt","wb"))==NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
    for(i=0;i<n;i++)
        if(fwrite(&course[i],sizeof(struct Course),1,fp)!=1);
            printf("file write error\n");
    fclose(fp);   
}
void ssave(int n)//学生信息录入
{
    FILE *fp;
    int i;
    if((fp=fopen("E:\\sdata.txt","wb"))==NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
    for(i=0;i<n;i++)
        if(fwrite(&student[i],sizeof(struct Student),1,fp)!=1);
            printf("file write error\n");
    fclose(fp);   
}
void cshow(int n)//课程信息查询
{
    FILE *fp;
    int i;
    if((fp=fopen("E:\\cdata.txt","rb"))==NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
    for(i=0;i<n;i++)
    {
            fread(&course[i],sizeof(struct Course),1,fp);
            printf("5%d%20s%20s%20d%20d%20d%20d%20s",course[i].no,course[i].name,course[i].major,course[i].time,course[i].stime,course[i].ttime,course[i].score,course[i].ktime);
    }
    fclose(fp);   
}
void sshow(int n)//学生信息查询
{
    FILE *fp;
    int i;
    if((fp=fopen("E:\\sdata.txt","rb"))==NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
    for(i=0;i<n;i++)
    {
            fread(&student[i],sizeof(struct Student),1,fp);
            printf("%d%20s%20s%20s",student[i].num,student[i].name,student[i].major,student[i].grade);
    }
    fclose(fp);   
}
void main()
{
    int i,j=1,m,n,p;
    menu();
    printf("          请输入您的选择:");
    scanf("%d",&i);
    while(j)
    {
        switch(i)
        {
        case 1:
            system("cls");
            menu1();
            while(j)
            {
                printf("          请输入您的选择:");
                scanf("%d",&m);
                switch(m)
                {
                case 1:
                    system("cls");
                    printf("请管理员初始化课程信息:\n");
                    printf("请输入课程数量:");
                    scanf("%d",&n);
                    for(p=0;p<n;p++)
                    {
                        printf("\n请输入课程编号:");
                        scanf("%d",&course[p].no);
                        printf("请输入课程名称:");
                        scanf("%s",course[p].name);
                        printf("请输入课程性质:");
                        scanf("%s",course[p].major);
                        printf("请输入学时:");
                        scanf("%d",&course[p].time);
                        printf("请输入授课学时:");
                        scanf("%d",&course[p].stime);
                        printf("请输入实验学时:");
                        scanf("%d",&course[p].ttime);
                        printf("请输入学分:");
                        scanf("%d",&course[p].score);
                        printf("请输入开课学期:");
                        scanf("%s",course[p].ktime);
                        csave(n);
                    }
                    break;
                system("pause");
                system("cls");
                menu1();
                case 2:
                    system("cls");
                    printf("请管理员初始化学生信息:\n");
                    for(p=0;p<5;p++)
                    {
                        printf("\n请输入课程编号:");
                        scanf("%d",&course[p].no);
                        printf("请输入课程名称:");
                        scanf("%s",course[p].name);
                        printf("请输入课程性质:");
                        scanf("%s",course[p].major);
                        printf("请输入学时:");
                        scanf("%d",&course[p].time);
                        printf("请输入授课学时:");
                        scanf("%d",&course[p].stime);
                        printf("请输入实验学时:");
                        scanf("%d",&course[p].ttime);
                        printf("请输入学分:");
                        scanf("%d",&course[p].score);
                        printf("请输入开课学期:");
                        scanf("%s",course[p].ktime);
                        csave(n);
                    }
                    break;
                }
            }
            j=0;
            break;
        case 2:
            system("cls");
            menu2();
            j=0;
            break;
        default:
            printf("          您的输入有误,请重新输入:");
            scanf("%d",&i);
            j=1;
            break;
        }
    }
}
2018-02-02 22:24
爱之梦魇
Rank: 2
等 级:论坛游民
帖 子:21
专家分:30
注 册:2018-2-2
得分:0 
回复 4楼 炎天
但你也差不多可以用编译器执行了
2018-02-02 22:24
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:0 

你指得是这个?


for (i = 0; i<n; i++)
        if (fwrite(&course[i], sizeof(struct Course), 1, fp) != 1);    //最后分号去掉
    printf("file write error\n");

for (i = 0; i<n; i++)
        if (fwrite(&student[i], sizeof(struct Student), 1, fp) != 1);   //最后分号去掉
    printf("file write error\n");

早知做人那么辛苦!  当初不应该下凡
2018-02-02 22:43
爱之梦魇
Rank: 2
等 级:论坛游民
帖 子:21
专家分:30
注 册:2018-2-2
得分:0 
回复 7楼 炎天
那我还有一个问题,你在命令提示符里输入的信息会跟文件打开后的信息一样吗
2018-02-02 22:52
爱之梦魇
Rank: 2
等 级:论坛游民
帖 子:21
专家分:30
注 册:2018-2-2
得分:0 
回复 7楼 炎天

你看我输入的是完整信息,但文件显示的却不完全,而且有乱码,这是怎么回事
2018-02-02 22:56
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:0 
你是指打开文件cdata.txt, 里面是乱码么?    "wb"  以2进制形式写入

早知做人那么辛苦!  当初不应该下凡
2018-02-02 23:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-484604-1-1.html




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

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