hexi3921 2019-12-11 22:02 采纳率: 0%
浏览 359

fprintf输出到文本之后会有一串代码结束。

论坛也发了贴,根据他的回答我改了我的程序,然而运行完一遍之后还是一样有一串不明代码,codeblocks也不报警告了。我把我完整的程序放上来,大概有500行,每个功能用完之后都会出现这个问题,我必须吧乱码删了才能继续下一个功能。网友告诉我函数后面要加return ;但是我试了下发现程序直接结束了,不会再跳到主函数,所以我只能用main()来进行返回主菜单的功能

图片说明

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

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"))==NULL)
{
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"))==NULL)
{
    printf("can't open file\n");
    exit(0);
}
    Node *p=first->next;
    while(p!=0){
    fprintf(fp1,"%5d%12s%9s%9d%9d%11d%11d\n",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)
    return main();
    else
    exit(0);
}






/*课程浏览ok的,从文本文件中输入数据浏览*/
void browser()
{
FILE *fp2;
struct course c;
int a=0,b=0;
if((fp2=fopen("course.txt","r"))==NULL)
{
printf("\ncan't open course!\n");
exit(0);
}
printf("课程编号  课程名称  课程性质  总学时  学分  考试课1或考察课2  开课学期:\n");
while(!feof(fp2))
{
fscanf(fp2,"%d%s%s%d%d%d%d",&c.num,c.name,c.kind,&c.time,&c.mark,&c.term,&c.opterm);
printf("%5d%12s%9s%9d%9d%11d%11d\n",c.num,c.name,c.kind,c.time,c.mark,c.term,c.opterm);
}
fclose(fp2);
printf("\n结果已全部显示!!!!\n");
while(b==0){
printf("\n1-返回主菜单;2-退出系统\n");
scanf("%d",&a);
if(a==1||a==2)
    b=1;
else
    printf("\n输入错误,请重新输入!!!\n");
}
if(a==1)
    return main();
    else
    exit(0);
}




/*课程查询ok的,从文本文件中输入数据判断查询*/
void search()
{
FILE *fp3;
struct course c;
int score;
char kind[10];
int b=0,e=0,a=0,d=0;
while(e==0){
printf("1.按课程编号查询,2.按课程名称查询.\n");
printf("请选择查询方式并输入选项数字:");
scanf("%d",&b);
if(b==1||b==2)
    e=1;
else
    printf("\n输入错误,请重新输入!!!\n");
}
if(b==1)
{
printf("\n请输入您要查询的课程编号:\n");
scanf("%d",&score);
if((fp3=fopen("course.txt","r"))==NULL)
{
printf("\nCannot open course!\n");
exit(0);
}
printf("课程编号  课程名称  课程性质  总学时  学分  考试课1或考察课2  开课学期:\n");
for(;!feof(fp3);)
{
fscanf(fp3,"%d%s%s%d%d%d%d\n",&c.num,c.name,c.kind,&c.time,&c.mark,&c.term,&c.opterm);
if(c.mark==score)
printf("%5d%12s%9s%9d%9d%11d%11d\n",c.num,c.name,c.kind,c.time,c.mark,c.term,c.opterm);
}
}
else
{printf("\n请输入您要查询的课程名称:\n");
scanf("%s",kind);
if((fp3=fopen("course.txt","r"))==NULL)
{
printf("\nCannot open course!\n");
exit(0);
}
printf("课程编号  课程名称  课程性质  总学时  学分  考试课1或考察课2  开课学期:\n");
for(;!feof(fp3);)
{
fscanf(fp3,"%d%s%s%d%d%d%d\n",&c.num,c.name,c.kind,&c.time,&c.mark,&c.term,&c.opterm);
if(strcmp(c.kind,kind)==0)
printf("%5d%12s%9s%9d%9d%11d%11d\n",c.num,c.name,c.kind,c.time,c.mark,c.term,c.opterm);
}
}
fclose(fp3);
printf("\n结果已全部显示!!!!\n");
while(d==0){
printf("\n1-返回主菜单;2-退出系统\n");
scanf("%d",&a);
if(a==1||a==2)
    d=1;
else
    printf("\n输入错误,请重新输入!!!\n");
}
if(a==1)
    return main();
    else
    exit(0);
}






/*课程修改*/
void revise()/*修改函数的名字*/
{
    int a=0,b=0;
    int h,f;
    int key1=0;
    FILE *fp4;
if((fp4=fopen("course.txt","r"))==NULL)
{
printf("\nCannot open course!\n");
exit(0);
}

Node *first=(Node *)malloc(sizeof(Node));           /*头指针初始化*/
first->next=0;                                /*工作指针*/
for(;!feof(fp4);)
{
    Node *s=(Node*)malloc(sizeof(Node));
    fscanf(fp4,"%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;
}
printf("请输入需要修改的课程编号\n");
scanf("%d",&h);
Node *p=first->next;
while(p!=0){
    if(h==p->d.num)
    {
        printf("课程编号  课程名称  课程性质  总学时  学分  考试课1或考察课2  开课学期:\n");
        printf("%5d%12s%9s%9d%9d%11d%11d\n",p->d.num,p->d.name,p->d.kind,p->d.time,p->d.mark,p->d.term,p->d.opterm);
        printf("请输入替换的正确的课程信息\n");
        scanf("%d%s%s%d%d%d%d",&p->d.num,p->d.name,p->d.kind,&p->d.time,&p->d.mark,&p->d.term,&p->d.opterm);
    }
    else
        ;
    p=p->next;
}
printf("是否存盘??1为是2为否\n");
while(key1==0){
    scanf("%d",&f);
    if(f==1||f==2)
        key1=1;
    else
        printf("\n输入错误,请重新输入!!!\n");
}
if(f==1)
{
    fclose(fp4);
    if((fp4=fopen("course.txt","w"))==NULL)
{
    printf("can't open file\n");
    exit(0);
}
    Node *p1=first->next;
    while(p1!=0){
    fprintf(fp4,"%5d%12s%9s%9d%9d%11d%11d\n",p1->d.num,p1->d.name,p1->d.kind,p1->d.time,p1->d.mark,p1->d.term,p1->d.opterm);
    p1=p1->next;
}
}
    printf("修改完毕\n");
    Node *k=first;
    while(first!=0){
        first=first->next;
        free(k);
        k=first;
    }
    fclose(fp4);
while(b==0){
printf("\n1-返回主菜单;2-退出系统\n");
scanf("%d",&a);
if(a==1||a==2)
    b=1;
else
    printf("\n输入错误,请重新输入!!!\n");
}
if(a==1)
    return main();
    else
    exit(0);

}




/*课程删除*/
void delet()
{
    int a=0,b=0;
    int h;
    FILE *fp;


    printf("请输入需要删除的课程编号\n");
    scanf("%d",&h);
    if((fp=fopen("course.txt","r"))==NULL)
{
    printf("\nCannot open course!\n");
    exit(0);
}
    Node *first=(Node *)malloc(sizeof(Node));           /*头指针初始化*/
    first->next=0;                               /*工作指针指向头结点*/
    for(;!feof(fp);)
{
    Node *s=(Node*)malloc(sizeof(Node));
    fscanf(fp,"%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;
}
    Node *p1=first;Node *p2=first;Node *p3=first;
    int count=0,dele=0,obey=0;
    printf("请输入需要删除的课程编号\n");
    scanf("%d",&dele);
    for(;p1->next==0;)
    {
        if(p1->d.num==dele)
        {
            count++;
            printf("课程编号  课程名称  课程性质  总学时  学分  考试课1或考察课2  开课学期:\n");
            printf("%5d%12s%9s%9d%9d%11d%11d\n",p1->d.num,p1->d.name,p1->d.kind,p1->d.time,p1->d.mark,p1->d.term,p1->d.opterm);
            printf("请确认是否删除???1-是,2-否\n");
            scanf("%d",&obey);
            if(obey==1)
            {
                p2->next=p1->next;
                free(p1);
                printf("删除成功!!!!\n");
            }
            else;
        }
        else;
        p2=p1;
        p1=p1->next;
    }
    while(p1!=0){
    fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d\n",p3->d.num,p3->d.name,p3->d.kind,p3->d.time,p3->d.mark,p3->d.term,p3->d.opterm);
    p3=p3->next;
}

    while(b==0){
    printf("\n1-返回主菜单;2-退出系统\n");
    scanf("%d",&a);
    if(a==1||a==2)
    b=1;
    else
    printf("\n输入错误,请重新输入!!!\n");
}
    if(a==1)
    return main();
    else
    exit(0);
}















/*统计选课情况*/
void statistics()
{
int a;
FILE *fp;

   if((fp=fopen("course.txt","r"))==NULL)
{
    printf("\nCannot open course!\n");
    exit(0);
}
Node *first=(Node *)malloc(sizeof(Node));           /*头指针初始化*/
first->next=0;
for(;!feof(fp);)
{
    Node *s=(Node*)malloc(sizeof(Node));
    fscanf(fp,"%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;
}

    Node *e=first->next;
int count1,count2,count3,count4;
for(;e==0;)
{
    if(e->d.opterm==1)
        count1++;
        else
            if(e->d.opterm==2)
            count2++;
        else
            if(e->d.opterm==3)
            count3++;
        else
            if(e->d.opterm==4)
            count4++;
            else
    printf("课程编号  课程名称  课程性质  总学时  学分  考试课1或考察课2  开课学期:\n");
    printf("%5d%12s%9s%9d%9d%11d%11d\n",e->d.num,e->d.name,e->d.kind,e->d.time,e->d.mark,e->d.term,e->d.opterm);
            e=e->next;
}
printf("开课学期为1的有%d门,开课学期为2的有%d门,开课学期为3的有%d门,开课学期为4的有%d门\n",count1,count2,count3,count4);
    Node *k=first;
    while(first!=0){
        first=first->next;
        free(k);
        k=first;
    }
fclose(fp);
printf("\n1-返回主菜单;2-退出选课系统\n");
scanf("%d",&a);
if(a==1)
return main();
else
exit(0);
}

/*主菜单*/
void main()
{
int n,w;
printf("*********************************************************************************\n");
printf("                                      学生选课系统菜单\n");
printf("*********************************************************************************\n");
printf("                                      1-录入\n");
printf("                                      2-浏览\n");
printf("                                      3-查询\n");
printf("                                      4-修改\n");
printf("                                      5-删除\n");
printf("                                      6-统计\n");
printf("                                      0-退出\n");
printf("*********************************************************************************\n");
printf("                请输入选项前的数字\n");
scanf("%d",&n);
do
{
if(n>5||n<0)
{
printf("\n输入错误\n");
scanf("%d",&n);
}
else w=1;
}while(w==0);
switch(n)
{
case 1:insert();break;
case 2:browser();break;
case 3:search();break;
case 4:revise();break;
case 5:statistics();break;
case 6:delet();break;
case 0:exit(0);
}
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-12-12 09:38
    关注

    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);
    这里调试下,后面这些整数是否都有值,还是没有初始化的状态

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料