juedian 发表于 2020-12-9 20:12:47

投票计数,结果以二进制形式存入文件中

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

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


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

        }
        for(i=0;i<3;i++)
                for(j=0;j<3-i;j++)
                {
                        if(stu.num>stu.num)
                        {
                                temp=stu;
                                stu=stu;
                                stu=temp;
                        }
                }
                        for(i=0;i<3;i++)
                        {
                                printf("%s\n%d\n",stu.name,stu.num);
                        }
                        fp1=fopen("leader","w");
                        fwrite(stu,100,3,fp1);
                        fclose(fp1);
}

jackz007 发表于 2020-12-9 21:15:41

本帖最后由 jackz007 于 2020-12-9 21:18 编辑

#include<stdio.h>

typedef struct student
{
      char name ;
      intnum      ;
} LEAD                ;

int main()
{
      FILE * fp                                                                     ;
      LEAD stu[]={{"Li",0} , {"Wang",0} , {"Zhang",0}} , res                     ;
      int d , i , j , k , m = 100                                                ;
      char fn[] = "lead.dat"                                                      ;
      for(i = 0 ; i < m ;) {
                printf("             第 [%d] 次投票\n" , i + 1)                     ;
                printf("\t1.       ---       Li [%d]\n" , stu . num)               ;
                printf("\t2.       ---   Wang [%d]\n" , stu . num)               ;
                printf("\t3.       ---    Zhang [%d]\n" , stu . num)               ;
                printf("         请选择候选人(1 - 3) : ")                           ;
                fflush(stdin)                                                         ;
                if(scanf("%d" , & k) == 1 && k > 0 && k < 4) {
                        stu . num ++                                           ;
                        i ++                                                          ;
                } else printf("\n\t   *** 投票无效!***\n")                         ;
                printf("\n")                                                          ;
      }
      for(i = 0 ; i < 3 ; i ++) d = i                                          ;
      for(i = 0 ; i < 2 ; i ++) {
                for(j = i + 1 ; j < 3 ; j ++) {
                        if(stu] . num < stu] . num) {
                              k = d                                              ;
                              d = d                                           ;
                              d = k                                              ;
                        }
                }
      }      
      if((fp = fopen(fn , "wb")) != NULL) {
                fwrite(& m , sizeof(int) , 1 , fp)                                             ;
                for(i = 0 ; i < 3 ; i ++) fwrite(& stu] , sizeof(LEAD) , 1 , fp)          ;
                fclose(fp)                                                                     ;
                if((fp = fopen(fn , "rb")) != NULL) {
                        fread(& m, sizeof(int) , 1 , fp)                                     ;
                        fread(res , sizeof(LEAD) , 3 , fp)                                     ;
                        fclose(fp)                                                             ;
                        printf("\t   选举计票结果如下 : \n")                                 ;
                        printf("\t1.    ---%-5s---   %d\n" , res . name , res . num) ;
                        printf("\t2.    ---%-5s---   %d\n" , res . name , res . num) ;
                        printf("\t3.    ---%-5s---   %d\n" , res . name , res . num) ;
                } else {
                        fprintf(stderr , "\n")                                                 ;
                        fprintf(stderr , "*** 无法打开输入文件 [%s] ***\n" , fn)               ;
                        fprintf(stderr , "\n")                                                 ;
                }
      } else {
                fprintf(stderr , "\n")                                                         ;
                fprintf(stderr , "*** 无法创建输出文件 [%s] ***\n" , fn)                     ;
                fprintf(stderr , "\n")                                                         ;
      }
}
页: [1]
查看完整版本: 投票计数,结果以二进制形式存入文件中