hexi3921 2019-12-11 23:03 采纳率: 0%
浏览 248

用fprintf输出到文本里,不是很懂问题出在哪里?

输出到文本里的时候在末尾会一串乱码,原始数据还在,希望能删除那个代码,不然后续功能很难使用。
图片说明

struct course
{
int num;                               /*课程编号*/
char name[30];                         /*课程名称*/
char kind[20];                         /*课程性质*/
int time;                              /*课时*/
int mark;                              /*学分*/
int term;                              /*1为考试2为考察*/
int opterm;                            /*开课学期*/
};

typedef struct Node                  /*创建头结点*/
{
   struct course d;
   struct Node *next;
}Node;




/*课程插入*/
void insert()
{
FILE *fp1;
int g=1,key=0,key1=0,f=0;
int a=0,b=0;
if((fp1=fopen("course.txt","r"))==0)
{
printf("can't open file\n");
exit(0);
}

Node *first=(Node *)malloc(sizeof(Node));           /*头指针初始化*/
first->next=0;
for(;!feof(fp1);)
{
    Node *s=(Node*)malloc(sizeof(Node));
    fscanf(fp1,"%d%s%s%d%d%d%d",&s->d.num,&s->d.name,&s->d.kind,&s->d.time,&s->d.mark,&s->d.term,&s->d.opterm);
    s->next=first->next;
    first->next=s;
}

for(;g==1;)
{
    printf("请输入需要插入的课程信息:\n课程编号,课程名称,课程性质,课时,学分,1为考试2为考察,开课学期\n");
    Node *e=(Node*)malloc(sizeof(Node));
    scanf("%d%s%s%d%d%d%d",&e->d.num,&e->d.name,&e->d.kind,&e->d.time,&e->d.mark,&e->d.term,&e->d.opterm);
    e->next=first->next;
    first->next=e;
    printf("是否继续输入?1为是,2为否\n");
    key=0;
while(key==0){
    scanf("%d",&g);
if(g==1||g==2)
    key=1;
else
    {printf("\n输入错误,请重新输入!!!\n");
    printf("是否继续输入?1为是,2为否\n");}
}
}
    fclose(fp1);
printf("是否存盘??1为是2为否\n");
while(key1==0){
    scanf("%d",&f);
    if(f==1||f==2)
        key1=1;
    else
        printf("\n输入错误,请重新输入!!!\n");
}
if(f==1)
{
    if((fp1=fopen("course.txt","w"))==0)
{
    printf("can't open file\n");
    exit(0);
}
    Node *p=first->next;
    while(p!=0){
    fprintf(fp1,"%5d%12s%9s%9d%9d%11d%11d",p->d.num,p->d.name,p->d.kind,p->d.time,p->d.mark,p->d.term,p->d.opterm);
    p=p->next;
}
}
    printf("录入完毕\n");
        Node *k=first;
    while(first!=0){
        first=first->next;
        free(k);
        k=first;
    }
fclose(fp1);
while(b==0){
printf("\n1-返回主菜单;2-退出系统\n");
scanf("%d",&a);
if(a==1||a==2)
    b=1;
else
    printf("\n输入错误,请重新输入!!!\n");
}
if(a==1)
    main();
    else
    exit(0);
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 16:24
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 请求分析基于spring boot+vue的前后端分离的项目
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么