鱼C论坛

 找回密码
 立即注册
查看: 1020|回复: 1

[已解决]投票计数,结果以二进制形式存入文件中

[复制链接]
发表于 2020-12-9 20:12:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求教C语言内,我想实现的功能是———
统计候选人得票问题,已知有三个候选人" LI", WANG "," ZHANG "(结构体定义),投票人有100人,写程序完成统计所有投票人完成投票过程后,候选人从高到低排序(起泡法),并将数据保存到磁盘文件 Leader 中
(1)完成投票过程,排序过程;
(2)完成存盘(以二进制方式写到磁盘文件中);

求教为什么得不到正确的结果,能帮我指出来吗?谢谢啦!


#include<stdio.h>
struct student
{
        char name[10];
        int num;
};
int main()
{                FILE *fp1;
        struct student stu[]={{"Li",0},{"Wang",0},{"Zhang",0}};
        struct student temp;
        int i,j;
        char s[10];
        for(i=0;i<100;i++)
        {
                printf("输入你想投票的人的名字");
                gets(s);
                if(s[0]=='L')
                        stu[0].num=stu[0].num+1;
                if(s[0]=='W')
                        stu[1].num=stu[1].num+1;
                if(s[0]=='Z')
                        stu[2].num=stu[2].num+1;

        }
        for(i=0;i<3;i++)
                for(j=0;j<3-i;j++)
                {
                        if(stu[j].num>stu[j+1].num)
                        {
                                temp=stu[j];
                                stu[j]=stu[j+1];
                                stu[j+1]=temp;
                        }
                }
                        for(i=0;i<3;i++)
                        {
                                printf("%s\n%d\n",stu[i].name,stu[i].num);
                        }
                        fp1=fopen("leader","w");
                        fwrite(stu,100,3,fp1);
                        fclose(fp1);
}
最佳答案
2020-12-9 21:15:41
本帖最后由 jackz007 于 2020-12-9 21:18 编辑
  1. #include<stdio.h>

  2. typedef struct student
  3. {
  4.         char name[10] ;
  5.         int  num      ;
  6. } LEAD                ;

  7. int main()
  8. {
  9.         FILE * fp                                                                     ;
  10.         LEAD stu[]={{"Li",0} , {"Wang",0} , {"Zhang",0}} , res[3]                     ;
  11.         int d[3] , i , j , k , m = 100                                                ;
  12.         char fn[] = "lead.dat"                                                        ;
  13.         for(i = 0 ; i < m ;) {
  14.                 printf("             第 [%d] 次投票\n" , i + 1)                       ;
  15.                 printf("\t1.       ---       Li [%d]\n" , stu[0] . num)               ;
  16.                 printf("\t2.       ---     Wang [%d]\n" , stu[1] . num)               ;
  17.                 printf("\t3.       ---    Zhang [%d]\n" , stu[2] . num)               ;
  18.                 printf("           请选择候选人(1 - 3) : ")                           ;
  19.                 fflush(stdin)                                                         ;
  20.                 if(scanf("%d" , & k) == 1 && k > 0 && k < 4) {
  21.                         stu[k - 1] . num ++                                           ;
  22.                         i ++                                                          ;
  23.                 } else printf("\n\t     *** 投票无效!***\n")                         ;
  24.                 printf("\n")                                                          ;
  25.         }
  26.         for(i = 0 ; i < 3 ; i ++) d[i] = i                                            ;
  27.         for(i = 0 ; i < 2 ; i ++) {
  28.                 for(j = i + 1 ; j < 3 ; j ++) {
  29.                         if(stu[d[i]] . num < stu[d[j]] . num) {
  30.                                 k = d[i]                                              ;
  31.                                 d[i] = d[j]                                           ;
  32.                                 d[j] = k                                              ;
  33.                         }
  34.                 }
  35.         }        
  36.         if((fp = fopen(fn , "wb")) != NULL) {
  37.                 fwrite(& m , sizeof(int) , 1 , fp)                                             ;
  38.                 for(i = 0 ; i < 3 ; i ++) fwrite(& stu[d[i]] , sizeof(LEAD) , 1 , fp)          ;
  39.                 fclose(fp)                                                                     ;
  40.                 if((fp = fopen(fn , "rb")) != NULL) {
  41.                         fread(& m  , sizeof(int) , 1 , fp)                                     ;
  42.                         fread(res , sizeof(LEAD) , 3 , fp)                                     ;
  43.                         fclose(fp)                                                             ;
  44.                         printf("\t     选举计票结果如下 : \n")                                 ;
  45.                         printf("\t1.    ---  %-5s  ---   %d\n" , res[0] . name , res[0] . num) ;
  46.                         printf("\t2.    ---  %-5s  ---   %d\n" , res[1] . name , res[1] . num) ;
  47.                         printf("\t3.    ---  %-5s  ---   %d\n" , res[2] . name , res[2] . num) ;
  48.                 } else {
  49.                         fprintf(stderr , "\n")                                                 ;
  50.                         fprintf(stderr , "*** 无法打开输入文件 [%s] ***\n" , fn)               ;
  51.                         fprintf(stderr , "\n")                                                 ;
  52.                 }
  53.         } else {
  54.                 fprintf(stderr , "\n")                                                         ;
  55.                 fprintf(stderr , "*** 无法创建输出文件 [%s] ***\n" , fn)                       ;
  56.                 fprintf(stderr , "\n")                                                         ;
  57.         }
  58. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-9 21:15:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-12-9 21:18 编辑
  1. #include<stdio.h>

  2. typedef struct student
  3. {
  4.         char name[10] ;
  5.         int  num      ;
  6. } LEAD                ;

  7. int main()
  8. {
  9.         FILE * fp                                                                     ;
  10.         LEAD stu[]={{"Li",0} , {"Wang",0} , {"Zhang",0}} , res[3]                     ;
  11.         int d[3] , i , j , k , m = 100                                                ;
  12.         char fn[] = "lead.dat"                                                        ;
  13.         for(i = 0 ; i < m ;) {
  14.                 printf("             第 [%d] 次投票\n" , i + 1)                       ;
  15.                 printf("\t1.       ---       Li [%d]\n" , stu[0] . num)               ;
  16.                 printf("\t2.       ---     Wang [%d]\n" , stu[1] . num)               ;
  17.                 printf("\t3.       ---    Zhang [%d]\n" , stu[2] . num)               ;
  18.                 printf("           请选择候选人(1 - 3) : ")                           ;
  19.                 fflush(stdin)                                                         ;
  20.                 if(scanf("%d" , & k) == 1 && k > 0 && k < 4) {
  21.                         stu[k - 1] . num ++                                           ;
  22.                         i ++                                                          ;
  23.                 } else printf("\n\t     *** 投票无效!***\n")                         ;
  24.                 printf("\n")                                                          ;
  25.         }
  26.         for(i = 0 ; i < 3 ; i ++) d[i] = i                                            ;
  27.         for(i = 0 ; i < 2 ; i ++) {
  28.                 for(j = i + 1 ; j < 3 ; j ++) {
  29.                         if(stu[d[i]] . num < stu[d[j]] . num) {
  30.                                 k = d[i]                                              ;
  31.                                 d[i] = d[j]                                           ;
  32.                                 d[j] = k                                              ;
  33.                         }
  34.                 }
  35.         }        
  36.         if((fp = fopen(fn , "wb")) != NULL) {
  37.                 fwrite(& m , sizeof(int) , 1 , fp)                                             ;
  38.                 for(i = 0 ; i < 3 ; i ++) fwrite(& stu[d[i]] , sizeof(LEAD) , 1 , fp)          ;
  39.                 fclose(fp)                                                                     ;
  40.                 if((fp = fopen(fn , "rb")) != NULL) {
  41.                         fread(& m  , sizeof(int) , 1 , fp)                                     ;
  42.                         fread(res , sizeof(LEAD) , 3 , fp)                                     ;
  43.                         fclose(fp)                                                             ;
  44.                         printf("\t     选举计票结果如下 : \n")                                 ;
  45.                         printf("\t1.    ---  %-5s  ---   %d\n" , res[0] . name , res[0] . num) ;
  46.                         printf("\t2.    ---  %-5s  ---   %d\n" , res[1] . name , res[1] . num) ;
  47.                         printf("\t3.    ---  %-5s  ---   %d\n" , res[2] . name , res[2] . num) ;
  48.                 } else {
  49.                         fprintf(stderr , "\n")                                                 ;
  50.                         fprintf(stderr , "*** 无法打开输入文件 [%s] ***\n" , fn)               ;
  51.                         fprintf(stderr , "\n")                                                 ;
  52.                 }
  53.         } else {
  54.                 fprintf(stderr , "\n")                                                         ;
  55.                 fprintf(stderr , "*** 无法创建输出文件 [%s] ***\n" , fn)                       ;
  56.                 fprintf(stderr , "\n")                                                         ;
  57.         }
  58. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-10 14:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表