免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1300 | 回复: 6
打印 上一主题 下一主题

[C] c语言程序有点问题,请大家帮我看看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-02 21:31 |只看该作者 |倒序浏览
1.最后一个排序的函数有问题,先是乱码,输出错误信息
2.有动态内存怎么解决最后的成绩排序


#include<stdio.h>;
#include<string.h>;
#include<stdlib.h>;
//结构体
struct student
{
        char name[20];
        char sex;
        float score;
};       
void disp();
void student();
void menscore();
void womenscore();
void allscore();
void taxisscore();


void main()
{
       
        //struct student stud;
    int chioce=0;
       
    disp();
   
        printf("请选择您要执行的操作:\n";
        scanf("%d",&chioce);
     
        switch(chioce)
        {
                case 1:
                        student();
                        break;
               
        case 2:
                        menscore();
                        break;
                
                case 3:
                        womenscore();
                      break;
               
                case 4:
                        allscore();
                        break;
            
                case 5:
                        taxisscore();
                        break;
               
                case 6:
                        printf("退出系统!!!\n";
                        break;
                }
}

void disp()
{
        printf("\t|========================学生成绩管理系统===============|";
        printf("\n\t|                                                       |";
        printf("\n\t|\t\t1、请输入学生成绩\t\t\t|";
    printf("\n\t|\t\t2、显示所有男生学生成绩\t\t\t|";
        printf("\n\t|\t\t3、显示所有女生学生成绩\t\t\t|";
        printf("\n\t|\t\t4、显示所有的成绩\t\t\t|";
        printf("\n\t|\t\t5、显示所有排序后的成绩\t\t\t|";
        printf("\n\t|\t\t6、退出系统\t\t\t\t|\n";
        printf("\t|+=====================================================+|\n\n");
}

//添加学生成绩
void  student()
{
        FILE *fp;
    char flag='Y';
   
        struct student stud;

        system("cls");

        if((fp=fopen("student","a+"))==NULL)
        {
            printf("打开文件失败!!!");
                getchar();
                return;
        }

       
        while(flag=='Y')//控制添加的人数
        {
               
                while(1)
                {
                        printf("请输入学生姓名:\n");//
                    scanf("%s",&stud.name);
                        getchar();
               
                        if(strlen(stud.name)==0)
                        {
                                printf("您的输入有误,请重新输入!!!!\n");
                        }
                        else
                        {
                          break;
                        }
                }
          
                // 输入学生性别
                while(1)
                {
                        printf("请输入学生性别<男: M/女: F>;\n");//输入性别判断
                scanf(" %c",&stud.sex);
                       
                        if(stud.sex!='M'&&stud.sex!='F')
                        {
                                printf("您的输入有误,请重新输入!!!!!\n");
                        }
                        else
                        {
                             break;
                        }
                }
        
                //输入学生成绩
                while(1)
                {       
                        printf("请<0--100>;:\n");
                scanf("%f",&stud.score);
                       
                        if(stud.score>;0&&stud.score<100)
                        {
                                break;
                        }
                        else
                        {
                                printf("您的输入有误,请重新输入!!!!!:\n");
                                getchar();
                        }
                }
            
                //是否继续添加
               
                fwrite(&stud,sizeof(struct student),1,fp);//把学生的数据写入文件
            
                printf("写入成功,您要继续吗?<Y/N>;");
            scanf(" %c",&flag);
        printf("\n");
        }
       
        fclose(fp);
}

void menscore()
{
        FILE *fp;
    int count=0;
       
        struct student stud;

        fp=fopen("student","r");
       
        if(fp==NULL)
        {
                printf("打开文件失败!!!");
        getchar();  
               
                return;               
        }
   
       
       
        printf("所有男生成绩列表:\n");
        printf("姓名\t性别\t\t成绩\n");
    printf("______________________________\n");
       
        while(fread(&stud,sizeof(struct student),1,fp)==1)//条件:是否正常读出文件
        {
                if(stud.sex=='M')
                {
                        printf("%s\t%c\t\t%5.1f\n",stud.name,stud.sex,stud.score);
                count++;
                }
        }
       
        printf("______________________________\n");
        printf("%20d记录被找到\n",count);
        printf("点任意键返回.....\n");
       
        fclose(fp);
}

//所有女生成绩列表
void womenscore()
{
        FILE *fp;
   
        int count=0;
       
        struct student stud;

        fp=fopen("student","r");//以只读方式打开文件
       
        if(fp==NULL)
        {
                printf("打开文件失败!!!");
        getchar();  
               
                return;               
        }
   
        printf("所有女生成绩列表:\n");
        printf("姓名\t性别\t\t成绩\n");
    printf("______________________________\n");
       
        while(1)
        {
                fread(&stud,sizeof(struct student),1,fp);//读文件
               
                if(stud.sex=='F')
                {
                        printf("%s\t%c\t\t%5.1f\n",stud.name,stud.sex,stud.score);
                count++;
                }
        }
       
        printf("______________________________\n");
        printf("%20d记录被找到\n",count);
        printf("点任意键返回.....\n");
       
        fclose(fp);
}

//所有成绩列表
void allscore()
{
     FILE *fp;
       
         int count=0;

         struct student stud;
       
         fp = fopen("student","rb");//以只读方式打开文件
         
         if (fp==NULL)
         {
                 printf("打开文件失败!!!");
         getchar();
                 
                 return;
         }
       
         printf("所有成绩列表:\n");
         printf("姓名\t性别\t\t成绩\n");
     printf("______________________________\n");
     
         while(1)
         {
                 fread(&stud,sizeof(struct student),1,fp);//读文件
         if(feof(fp))
                 {
                         break;
                 }
               
                 printf("%s\t%c\t\t%5.1f\n",stud.name,stud.sex,stud.score);
                 count++;
         }

         printf("______________________________\n");
         printf("%20d记录被找到\n",count);
     printf("点任意键返回.....\n");
       
        fclose(fp);
}


               
//所有排序后的成绩
void taxisscore()
{
        FILE *fp;
   
        int i=0,j;
        int count=0;
       
        struct student stud[50],temp;

        fp=fopen("student","rb");//以只读方式打开文件

        if(fp==NULL)
        {
                printf("打开文件失败!!!");
                return;
        }
   
        //读文件
        while (1)
       
        {
                fread(&stud,sizeof(struct student),1,fp);//读文件
                       
                if(feof(fp))//检查文件是否已结束
                {
                        break;
                }
            
                count++;//累加读出文件的纪录
        }
          
        fclose(fp);       
       
        //排序
        for(i=1;i<count;i++)
        {
                   for(j=i-1;j<count;j++)
                   {
                           if(stud[i-1].score>;stud[j+1].score)
                           {
                                temp=stud[i-1];
                                stud[i-1]=stud[j+1];
                stud[j+1]=temp;
                           }
                   }
        }
   
        printf("______________________________\n");
       
        for(j=0;j<i;j++)
        {
                printf("%d\t%s\t%c\t%8.2f\n",j+1,stud[j].name,stud[j].sex,stud[j].score);
        }
         printf("______________________________\n");
         printf("%20d记录被找到\n",count);
     printf("点任意键返回.....\n");

}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-06-02 21:46 |只看该作者

c语言程序有点问题,请大家帮我看看

没有缩进 没加CODE标签.让人怎么看啊.

论坛徽章:
0
3 [报告]
发表于 2005-06-02 21:51 |只看该作者

c语言程序有点问题,请大家帮我看看

#include<stdio.h>;
#include<string.h>;
#include<stdlib.h>;
//结构体
struct student
{
        char name[20];
        char sex;
        float score;
};       
void disp();
void student();
void menscore();
void womenscore();
void taxisscore();
void allscore();


void main()
{
       
        //struct student stud;
                 int chioce=0;
       
               disp();
   
        printf("请选择您要执行的操作:\n";
        scanf("%d",&chioce);
     
        switch(chioce)
        {
                case 1:
                        student();
                        break;
               
                                 case 2:
                        menscore();
                        break;
                
                case 3:
                        womenscore();
                      break;
               
                case 4:
                        allscore();
                        break;
            
                case 5:
                        taxisscore();
                        break;
               
                case 6:
                        printf("退出系统!!!\n";
                        break;
                }
}

void disp()
{
        printf("\t|========================学生成绩管理系统===============|";
        printf("\n\t|                                                       |";
        printf("\n\t|\t\t1、请输入学生成绩\t\t\t|";
                printf("\n\t|\t\t2、显示所有男生学生成绩\t\t\t|";
        printf("\n\t|\t\t3、显示所有女生学生成绩\t\t\t|";
        printf("\n\t|\t\t4、显示所有的成绩\t\t\t|";
        printf("\n\t|\t\t5、显示所有排序后的成绩\t\t\t|";
        printf("\n\t|\t\t6、退出系统\t\t\t\t|\n";
        printf("\t|+=====================================================+|\n\n");
}

//添加学生成绩
void  student()
{
        FILE *fp;
               char flag='Y';
   
        struct student stud;

        system("cls");

        if((fp=fopen("student","a+"))==NULL)
        {
            printf("打开文件失败!!!");
                getchar();
                return;
        }

       
        while(flag=='Y')//控制添加的人数
        {
               
                while(1)
                {
                        printf("请输入学生姓名:\n");//
                    scanf("%s",&stud.name);
                        getchar();
               
                        if(strlen(stud.name)==0)
                        {
                                printf("您的输入有误,请重新输入!!!!\n");
                        }
                        else
                        {
                          break;
                        }
                }
          
                // 输入学生性别
                while(1)
                {
                        printf("请输入学生性别<男: M/女: F>;\n");//输入性别判断
                scanf(" %c",&stud.sex);
                       
                        if(stud.sex!='M'&&stud.sex!='F')
                        {
                                printf("您的输入有误,请重新输入!!!!!\n");
                        }
                        else
                        {
                             break;
                        }
                }
        
                //输入学生成绩
                while(1)
                {       
                        printf("请<0--100>;:\n");
                scanf("%f",&stud.score);
                       
                        if(stud.score>;0&&stud.score<100)
                        {
                                break;
                        }
                        else
                        {
                                printf("您的输入有误,请重新输入!!!!!:\n");
                                getchar();
                        }
                }
            
                //是否继续添加
               
                fwrite(&stud,sizeof(struct student),1,fp);//把学生的数据写入文件
            
                printf("写入成功,您要继续吗?<Y/N>;");
                         scanf(" %c",&flag);
                                 printf("\n");
        }
       
        fclose(fp);
}

void menscore()
{
        FILE *fp;
                 int count=0;
       
        struct student stud;

        fp=fopen("student","r");
       
        if(fp==NULL)
        {
                printf("打开文件失败!!!");
                                 getchar();  
               
                return;               
        }
   
       
       
        printf("所有男生成绩列表:\n");
        printf("姓名\t性别\t\t成绩\n");
                   printf("______________________________\n");
       
        while(fread(&stud,sizeof(struct student),1,fp)==1)//条件:是否正常读出文件
        {
                if(stud.sex=='M')
                {
                        printf("%s\t%c\t\t%5.1f\n",stud.name,stud.sex,stud.score);
                count++;
                }
        }
       
        printf("______________________________\n");
        printf("%20d记录被找到\n",count);
        printf("点任意键返回.....\n");
       
        fclose(fp);
}

//所有女生成绩列表
void womenscore()
{
        FILE *fp;
   
        int count=0;
       
        struct student stud;

        fp=fopen("student","r");//以只读方式打开文件
       
        if(fp==NULL)
        {
                printf("打开文件失败!!!");
                                   getchar();  
               
                return;               
        }
   
        printf("所有女生成绩列表:\n");
        printf("姓名\t性别\t\t成绩\n");
                   printf("______________________________\n");
       
        while(1)
        {
                fread(&stud,sizeof(struct student),1,fp);//读文件
               
                if(stud.sex=='F')
                {
                        printf("%s\t%c\t\t%5.1f\n",stud.name,stud.sex,stud.score);
                count++;
                }
        }
       
        printf("______________________________\n");
        printf("%20d记录被找到\n",count);
        printf("点任意键返回.....\n");
       
        fclose(fp);
}

//所有成绩列表
void allscore()
{
     FILE *fp;
       
         int count=0;

         struct student stud;
       
         fp = fopen("student","rb");//以只读方式打开文件
         
         if (fp==NULL)
         {
                 printf("打开文件失败!!!");
                                getchar();
                 
                 return;
         }
       
         printf("所有成绩列表:\n");
         printf("姓名\t性别\t\t成绩\n");
                   printf("______________________________\n");
     
         while(1)
         {
                 fread(&stud,sizeof(struct student),1,fp);//读文件
         if(feof(fp))
                 {
                         break;
                 }
               
                 printf("%s\t%c\t\t%5.1f\n",stud.name,stud.sex,stud.score);
                 count++;
         }

         printf("______________________________\n");
         printf("%20d记录被找到\n",count);
                 printf("点任意键返回.....\n");
       
        fclose(fp);
}


               
//所有排序后的成绩
void taxisscore()
{
        FILE *fp;
   
        int i=0,j;
        int count=0;
       
        struct student stud[50],temp;

        fp=fopen("student","rb");//以只读方式打开文件

        if(fp==NULL)
        {
                printf("打开文件失败!!!");
                return;
        }
   
        //读文件
        while (1)
       
        {
                fread(&stud,sizeof(struct student),1,fp);//读文件
                       
                if(feof(fp))//检查文件是否已结束
                {
                        break;
                }
            
                count++;//累加读出文件的纪录
        }
          
        fclose(fp);       
       
        //排序
        for(i=1;i<count;i++)
        {
                   for(j=i-1;j<count;j++)
                   {
                           if(stud[i-1].score>;stud[j+1].score)
                           {
                                temp=stud[i-1];
                                stud[i-1]=stud[j+1];
                stud[j+1]=temp;
                           }
                   }
        }
   
        printf("______________________________\n");
       
        for(j=0;j<i;j++)
        {
                printf("%d\t%s\t%c\t%8.2f\n",j+1,stud[j].name,stud[j].sex,stud[j].score);
        }
         printf("______________________________\n");
         printf("%20d记录被找到\n",count);
                 printf("点任意键返回.....\n");

}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-06-03 09:12 |只看该作者

c语言程序有点问题,请大家帮我看看

1、楼主请使用code标签,就是用中括号code中括号和中括号/code中括号将你的代码括起来。
2、动态内存是技术问题,排序是算法问题,没有必然联系。

论坛徽章:
0
5 [报告]
发表于 2005-06-03 11:42 |只看该作者

c语言程序有点问题,请大家帮我看看

for(i=0;i<count;i++)
{
        for(j=i;j<count;j++)
        {
                if(stud[j].score<stud.score)
                {
                        memset(&temp,0,sizeof(struct student));
                        memcpy(&temp,&stud,sizeof(struct student));
                        memcpy(&stud,&stud[j],sizeof(struct student));
                        memcpy(&stud[j],&temp,sizeof(struct student));
                }
        }
}
你把排序的那段改成这样就没问题了

论坛徽章:
0
6 [报告]
发表于 2005-06-03 14:18 |只看该作者

c语言程序有点问题,请大家帮我看看

  1. fread(&stud[i++],sizeof(struct student),1,fp);//读文件
复制代码



  1. for(i=0;i<count-1;i++)
  2. {
  3.      for(j=i+1;j<count;j++)
  4.     {
  5.         if(stud[i].score>;stud[j].score)
  6.        {
  7.            temp=stud[i];
  8.            stud[i]=stud[j];
  9.            stud[j]=temp;
  10.       }
  11.    }
  12. }//排序
复制代码

论坛徽章:
0
7 [报告]
发表于 2005-06-03 16:14 |只看该作者

c语言程序有点问题,请大家帮我看看

我把你的注释改了以后在TC20就可以正确运行了:
#include<stdio.h>;
#include<string.h>;
#include<stdlib.h>;
/*结构体*/
struct student
{
char name[20];
char sex;
float score;
};
void disp();
void student();
void menscore();
void womenscore();
void allscore();
void taxisscore();


void main()
{

/*struct student stud;*/
   int chioce=0;

   disp();
   
printf("请选择您要执行的操作:\n";
scanf("%d",&chioce);
   
switch(chioce)
{
case 1:
student();
break;

       case 2:
menscore();
break;
        
case 3:
womenscore();
      break;

case 4:
allscore();
break;
   
case 5:
taxisscore();
break;

case 6:
printf("退出系统!!!\n";
break;
}
}

void disp()
{
printf("\t|========================学生成绩管理系统===============|";
printf("\n\t|                                                       |";
printf("\n\t|\t\t1、请输入学生成绩\t\t\t|";
   printf("\n\t|\t\t2、显示所有男生学生成绩\t\t\t|";
printf("\n\t|\t\t3、显示所有女生学生成绩\t\t\t|";
printf("\n\t|\t\t4、显示所有的成绩\t\t\t|";
printf("\n\t|\t\t5、显示所有排序后的成绩\t\t\t|";
printf("\n\t|\t\t6、退出系统\t\t\t\t|\n";
printf("\t|+=====================================================+|\n\n");
}

/*添加学生成绩*/
void  student()
{
FILE *fp;
   char flag='Y';
   
struct student stud;

system("cls");

if((fp=fopen("student","a+"))==NULL)
{
   printf("打开文件失败!!!");
getchar();
return;
}


while(flag=='Y')/*控制添加的人数 */
{

while(1)
{
printf("请输入学生姓名:\n");
   scanf("%s",&stud.name);
getchar();

if(strlen(stud.name)==0)
{
printf("您的输入有误,请重新输入!!!!\n");
}
else
{
break;
}
}
  
/* 输入学生性别 */
while(1)
{
printf("请输入学生性别<男: M/女: F>;\n");/*输入性别判断 */
       scanf(" %c",&stud.sex);

if(stud.sex!='M'&&stud.sex!='F')
{
printf("您的输入有误,请重新输入!!!!!\n");
}
else
{
    break;
}
}
        
/*输入学生成绩 */
while(1)
{
printf("请<0--100>;:\n");
       scanf("%f",&stud.score);

if(stud.score>;0&&stud.score<100)
{
break;
}
else
{
printf("您的输入有误,请重新输入!!!!!:\n");
getchar();
}
}
   
/*是否继续添加*/

fwrite(&stud,sizeof(struct student),1,fp);/*把学生的数据写入文件*/
   
printf("写入成功,您要继续吗?<Y/N>;");
   scanf(" %c",&flag);
       printf("\n");
}

fclose(fp);
}

void menscore()
{
FILE *fp;
   int count=0;

struct student stud;

fp=fopen("student","r");

if(fp==NULL)
{
printf("打开文件失败!!!");
       getchar();   

return;
}
   


printf("所有男生成绩列表:\n");
printf("姓名\t性别\t\t成绩\n");
   printf("______________________________\n");

while(fread(&stud,sizeof(struct student),1,fp)==1)/*条件:是否正常读出文件 */
{
if(stud.sex=='M')
{
printf("%s\t%c\t\t%5.1f\n",stud.name,stud.sex,stud.score);
       count++;
}
}

printf("______________________________\n");
printf("%20d记录被找到\n",count);
printf("点任意键返回.....\n");

fclose(fp);
}

/*所有女生成绩列表*/
void womenscore()
{
FILE *fp;
   
int count=0;

struct student stud;

fp=fopen("student","r");/*以只读方式打开文件 */

if(fp==NULL)
{
printf("打开文件失败!!!");
       getchar();   

return;
}
   
printf("所有女生成绩列表:\n");
printf("姓名\t性别\t\t成绩\n");
   printf("______________________________\n");

while(1)
{
fread(&stud,sizeof(struct student),1,fp);/*读文件 */

if(stud.sex=='F')
{
printf("%s\t%c\t\t%5.1f\n",stud.name,stud.sex,stud.score);
       count++;
}
}

printf("______________________________\n");
printf("%20d记录被找到\n",count);
printf("点任意键返回.....\n");

fclose(fp);
}

/*所有成绩列表 */
void allscore()
{
    FILE *fp;

int count=0;

struct student stud;

fp = fopen("student","rb");/*以只读方式打开文件 */

if (fp==NULL)
{
printf("打开文件失败!!!");
        getchar();

return;
}

printf("所有成绩列表:\n");
printf("姓名\t性别\t\t成绩\n");
    printf("______________________________\n");
   
while(1)
{
fread(&stud,sizeof(struct student),1,fp);/*读文件 */
        if(feof(fp))
{
break;
}

printf("%s\t%c\t\t%5.1f\n",stud.name,stud.sex,stud.score);
count++;
}

printf("______________________________\n");
printf("%20d记录被找到\n",count);
    printf("点任意键返回.....\n");

fclose(fp);
}



/*所有排序后的成绩 */
void taxisscore()
{
FILE *fp;
   
int i=0,j;
int count=0;

struct student stud[50],temp;

fp=fopen("student","rb");/*以只读方式打开文件 */

if(fp==NULL)
{
printf("打开文件失败!!!");
return;
}
  
/*读文件*/
while (1)

{
fread(&stud,sizeof(struct student),1,fp);/*读文件 */

if(feof(fp))/*检查文件是否已结束*/
{
break;
}
   
count++;/*累加读出文件的纪录*/
}
  
fclose(fp);

/*排序*/
for(i=1;i<count;i++)
{
  for(j=i-1;j<count;j++)
  {
  if(stud[i-1].score>;stud[j+1].score)
  {
temp=stud[i-1];
stud[i-1]=stud[j+1];
               stud[j+1]=temp;
  }
  }
}
   
printf("______________________________\n");

for(j=0;j<i;j++)
{
printf("%d\t%s\t%c\t%8.2f\n",j+1,stud[j].name,stud[j].sex,stud[j].score);
}
printf("______________________________\n");
printf("%20d记录被找到\n",count);
    printf("点任意键返回.....\n");

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP