标题:求大神帮忙看看为什么这个程序运行到一半就停止运行了
只看楼主
小心心1997
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-12-29
结帖率:0
已结贴  问题点数:10 回复次数:3 
求大神帮忙看看为什么这个程序运行到一半就停止运行了
求大神帮忙看看为什么这个程序运行到一半就停止运行了
#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define SIZE 2 /*定义常量SIZE便于以后的修改*/

struct student /*定义一个结构体数组存放学生的信息*/
{

    int number[20]; /*学号*/

    char name[30];/*姓名*/

    int age[20];/*年龄*/   
   
   char sex[20];/*性别*/
   
   int bday[20];/*生日*/
   
   char address[30];/*住址*/   

    int tel[22];/*电话*/

   char email[30];/*邮箱*/

}stu[SIZE];
void menu();/*调用菜单函数*/

void write();/*读入信息*/

void save(int x);/*保存stud.dat文件函数*/

void SaveOneStudent(int i);/*保存一个学生信息*/

void SaveAllStudent(int n);/*保存全部学生信息*/

void inturn (struct student c[]);/*用于对学生的信息按学号排序的函数*/

void save2();/*将排序后的信息存入student.dat文件中*/

int AddStudent(int n);/*增加学生信息*/

void InputOnestudent(int i);/*输入一个同学信息*/

int DelStudent(int n);/*删除学生信息*/

void ModifyStudent(int n);/*修改学生信息*/

void OutputOneStudent(int i);/*查询一个学生信息*/

void SearchMenu(int n);/*查询学生信息操作*/

void SearchNumber(int n);/*按学号查询学生信息*/

void read();/*读取student.dat文件文件中学生的信息*/
void menu()

{

    printf("********************************请输入所需操作*******************************\n");/*选择功能菜单*/

    printf("*****************************************************************************\n");

    printf("****************************1.学生成绩写入及排序****************************\n");

    printf("****************************2.增加学生信息**********************************\n");

    printf("****************************3.删除学生信息**********************************\n");

    printf("****************************4.修改学生信息**********************************\n");                             

    printf("****************************5.查询学生信息**********************************\n");

    printf("****************************0.退出系统**************************************\n");

    printf("**********************************************************\n");

}
void save(int x)//写入文件

{

    FILE *fp;/*定义文件指针用于向文件读入数据*/

    int i;

    if((fp=fopen("student.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/

    {

        printf("cannot open file\n");

       exit(1);

    }

    for(i=0;i<SIZE;i++)

        if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

            printf("file write error\n");

    fclose(fp);

    printf("\n信息保存成功!恭喜!!\n");

}
void SaveOneStudent(int i)//保存一个学生的信息

{

    FILE *fp;

    if((fp=fopen("student.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/

    {

        printf("文件打开失败!\n");

        exit(1);

    }

    fseek(fp,i,0);/*文件指针定位到第i个学生*/

    fwrite(&stu[i],sizeof(struct student),1,fp);/*将第i个学生信息写入文件*/

    fclose(fp);

}
 void SaveAllStudent(int n)/*保存全部学生信息*/

{

    FILE *fp;

    if((fp=fopen("student.dat","wb"))==NULL)/*以二进制写方式打开文件*/

    {

        printf("文件打开失败!\n");

        exit(1);

    }

    fwrite(stu,sizeof(struct student),n,fp);/*将数组stu中全部学生信息写入文件*/

    fclose(fp);

}

void write()

{

    int i;/*计数变量*/

    for(i=0;i<SIZE;i++)

    {

        printf("学号:");

        scanf("%d",&stu[i].number);

        printf("姓名:");

        scanf("%s",&stu[i].name[10]);
        
        printf("年龄:");
        
        scanf("%d",&stu[i].age);
        
        printf("性别:");
        
        scanf("%s",&stu[i].sex[2]);
        
        printf("生日:");
        
        scanf("%s",&stu[i].bday);
        
        printf("住址:");
        
        scanf("%s",&stu[i].address[10]);
        
        printf("电话:");
        
        scanf("%d",&stu[i].tel);
        
        printf("邮箱:");
        
        scanf("%s",&stu[i].email[20]);
        
    }

}
void inturn(struct student m[])//按学号排序

{

    int i,j;/*计数变量*/

    struct student temp;/*中间变量 类型为结构体*/

    for(i=0;i<SIZE-1;i++) /*运用冒泡排序对结构体数组进行排序*/

    for (j=i+1;j<SIZE-i-1;j++)

    {

       if(m[i].number>m[j].number)

       {

           temp=m[i];

           m[i]=m[j];

           m[j]=temp;

       }

    }

    printf("\n排序后的学生信息:\n\n");

    for (i=0;i<SIZE;i++)

    {

        printf("学号%d\t姓名%s\t年龄%d\t性别%s\t生日%d\t住址%s\t电话%d\t邮箱%s\t\n\n",i+1,stu[i].number,stu[i].name[10],stu[i].age,stu[i].sex[2],stu[i].bday,stu[i].address[10],stu[i].tel,stu[i].email[20]);

    }/*输出排序后的学生信息*/
}

void save2()//将排序后的学生信息保存

{

    FILE *fp;

    int i;

    if((fp=fopen("stud.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/

    {

        printf("文件打开失败!\n");

        exit(1);

    }

    for (i=0;i<SIZE;i++)

        if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

        printf("file write error\n");

    fclose(fp);/*读取完毕关闭文件*/

}
int AddStudent(int n)//增加学生信息

{

    char c='y';

    FILE *fp;

    if((fp=fopen("student.dat","ab"))==NULL)/*以二进制追加方式打开文件*/

    {

        printf("文件打开失败!\n");

        exit(1);

    }

    while(c=='y')

    {

        printf("\n请输入要增加的同学的信息:");

        InputOnestudent(n);/*调用函数输入第n个学生信息*/

       fwrite(&stu[n],sizeof(struct student),1,fp);/*将第n个学生信息保存至文件*/

       n++;/*学生数量增加1*/

        printf("\n继续输入其他同学信息吗?\n");

        printf("确定进行删除请按y;不进行删除请按n\n");

       c=getchar();

        getchar();

    }/*结束while*/

    printf("\n按任意键继续!\n");

    getchar();

    fclose(fp);

    return(n);

}
void InputOnestudent(int i)//输入一个学生的信息

{

    printf("学号\t姓名\t年龄\t性别\t生日\t住址\t电话\t邮箱\n");

    scanf("%d\t%s\t%d\t%s\t%d\t%s\t%d\t%s\t\n",&stu[i].number,stu[i].name[10],stu[i].age,&stu[i].sex[2],&stu[i].bday,&stu[i].address[10],&stu[i].tel,&stu[i].email[20]);      
}
int DelStudent(int n)//删除学生信息

{

    int i,k=-1,x;

    char c1='y',c2;

    while(c1=='y')

    {

       c2='n';

        printf("\n请输入要删除的同学的学号:");

        scanf("%d",&x);

        for(i=0;i<n;i++)

           if(x==stu[i].number)

           {

               k=i;/*找到要删除的同学学号,并用k记下其下标*/

               break;

           }

        if(k<0)/*k<0表示在数组中没有找到输入学号对应的学生*/

            printf("\n输入学号有误,请重新输入!");

        else

       {

            printf("\n该同学信息如下:\n");

            InputOnestudent(k);

            printf("\n确定删除?\n");

            printf("确定进行删除请按y;不进行删除请按n\n");

           c2=getchar();

           getchar();

           if(c2=='y')/*c2为y,表示确定进行删除操作*/

           {

               for(i=k;i<n;i++)

                  stu[i]=stu[i+1];/*删除第k个学生信息*/

               n--;/*学生人数减1*/

               printf("删除成功!恭喜!!\n");

           }

           else

               printf("\n取消删除!\n");

            printf("\n继续删除操作吗?");

            printf("\n继续删除请按y;不进行删除请按n\n");

           c1=getchar();

           getchar();

       }

    }/*结束while*/

    save(n);

    printf("\n按任意键继续!\n");

    getchar();

    return(n);

}
void ModifyStudent(int n)//修改学生信息

{

    struct student temp;

    int k=-1,x,i;

    char c1='y',c2;

    while(c1=='y')

    {

       c2='y';

        printf("\n请输入要修改的同学的学号:");

        scanf("%d",&x);

        for(i=0;i<n;i++)

           if(x==stu[i].number)

           {

               k=i;/*找到要修改的同学学号,并用k记下其下标*/

               break;

           }

        if(k<0)/*k<0表示在数组中没有找到输入学号对应的学生*/

            printf("\n输入学号有误,请重新输入!");

        else

       {

            printf("请输入要修改学生修改后的的信息\n");

            printf("学号\t姓名\t年龄\t性别\t生日\t住址\t电话\t邮箱\t\n");

            scanf("%d\t%s\t%d\t%s\t%d\t%s\t%d\t%s\t\n",&temp.number,stu[i].name[10],&temp.age,&temp.sex[2],&temp.bday,&temp.address[10],&temp.tel,&temp.email[20]);      

            stu[k]=temp;/*修改该学生信息*/

            printf("\n修改成功!恭喜!!\n");

           break;

       }

        SaveAllStudent(k);/*保存修改后的学生信息*/

        printf("\n继续修改操作吗?");

        printf("\n继续修改请按y;不进行修改请按n\n");

       c1=getchar();

        getchar();

    }/*结束while*/

    printf("\n按任意键继续!\n");

    getchar();

}
void OutputOneStudent(int i)//输出一个学生信息

{
  printf("学号%d\t姓名%s\t年龄%d\t性别%s\t生日%d\t住址%s\t电话%d\t邮箱%s\t\n\n",i+1,stu[i].number,stu[i].name[10],stu[i].age,stu[i].sex[2],stu[i].bday,stu[i].address[10],stu[i].tel,stu[i].email[20]);
}
void SearchNumber(int n)

{

    int i,j,k,x;

    char c='y';

    while(c=='y')

    {

       k=-1;

       printf("\n请输入学生学号:");

       scanf("%d",&x);

       for(i=0,j=1;i<n;i++)

           if(stu[i].number==x)

           {

               k=i;/*找到要查询的同学学号,并用k记下其下标*/

                 printf("学号%d\t姓名%s\t年龄%d\t性别%s\t生日%d\t住址%s\t电话%d\t邮箱%s\t\n\n",stu[k].number,stu[k].name[10],stu[k].age,stu[k].sex[2],stu[k].bday,stu[k].address[10],stu[k].tel,stu[k].email[20]);


                printf("\n按任意键继续!\n");

                getchar();

           }

       printf("继续查询其他学生信息吗?");

        printf("\n继续修改请按y;不进行修改请按n\n");

       c=getchar();

        getchar();

    }/*结束while*/

    printf("\n按任意键继续!\n");

    getchar();

}

void SearchMenu(int n)

{

        printf("**********************************************************\n");

        printf("******************** 欢迎进入查询系统  *******************\n");   

        printf("**********************************************************\n");

        SearchNumber(n);
}

int main()
    {  
     int n=SIZE;

    int choice;/*用户选择变量*/

    printf("*******************************************************************************\n");

    printf("*                                                                             *\n");

    printf("*                            &学生基本信息管理&                               *\n");

    printf("*                                                                             *\n");

    printf("*******************************************************************************\n\n\n");

    printf("******************************●●欢迎使用●●*********************************");

    while(1)
 {

         menu();/*调用菜单函数形成操作界面*/

         printf("请选择:");

         scanf("%d", &choice);

         if ( choice==0 )

         {

              printf("\t\t\t\t谢谢使用!!!");

              break;

          }

       switch(choice) /*多重选择实现功能不同的功能*/

       {  

            case 1:write();inturn(stu);save(SIZE);save2;break;

            case 2:AddStudent(n);break;

           case 3:DelStudent(n);break;

           case 4:ModifyStudent(n);break;

           case 5:SearchMenu(n);break;

           case 0:printf("\n谢谢使用!再见!\n");

           default:

              printf("\n按键错误!请重新选择!\n");

       }/*结束switch*/

    }}/*结束while*/

搜索更多相关主题的帖子: address include number 结构体 email 
2015-12-29 23:56
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
得分:5 
在哪个地方停止就检查哪个地方

一片落叶掉进了回忆的流年。
2015-12-30 09:22
小心心1997
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-12-29
得分:0 
回复 2楼 诸葛欧阳
并没有显示在哪停止,是跳出来一个对话框,程序停止运行
2015-12-30 14:37
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
得分:5 
这种事可能原因是程序走的过程中遇到无法计算的情况,比如数组下标越界,节点指针应用越界,判断句中遇到无法判断的极端情形等。你得慢慢自己检查了。各个函数在主函数中都让它跑到,找出出问题的地方,加入一些打印字符,一步步找。
2015-12-30 15:20



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




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

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