2201_75522822 2023-03-02 10:03 采纳率: 66.7%
浏览 26
已结题

关于#C语言 #文件末尾出现一堆“屯”的问题

写一个歌手评分系统,打开文件之后,将数据fprintf和fscanf,数据正常录入,但是文件中末尾出现一堆“屯”(开发环境是vc6.0)部分代码如下:


int main()
{
    int a,b,d; 
    //a代表要进行的某个操作;b为需要录入的选手的人数;d为需要追加的选手的人数
    int n,i;  //n为选手编号
    int m;  //m为追加选手数据后的选手人数
    

    FILE *fp;
    fp=fopen("Campus Singer Grand Prix scoring system.txt","wt+");  
    //“wt+”读写打开或建立一个文本文件,允许读写

    //判断文件是否打开失败
       if(fp==NULL)
    {
          printf("文件打开失败!\n");
        exit(0);  //打开失败则退出程序
    }else{
        printf("打开成功!\n");
    }


     printf("*********************************************************************\n");
     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("*     (7)系统退出。                                                                    *\n");
     printf("***********************************************************************\n");
   8  printf("**********************************************************************\n");


    while(1)
    {

    
        printf("请选择你想要的操作(1~7):");
        scanf("%d",&a);
        
        printf("\n\n\n");

        switch(a)
        {

            case 1:

                printf("你选择的操作是:(1)输入选手数据\n");
                printf("请选择你要输入的选手的个数:");
                scanf("%d",&b);

                Singer_data(b);
                printf("\n-------------------------------------\n");

                break;

            case 2:

                printf("你选择的操作是:(2)评委(五位)打分(请保留小数点后一位)\n");

                printf("请输入选手人数:");
                scanf("%d",&b);

                printf("满分为十分,请打分\n");
               
                Singer_score(b);
                printf("\n---------------------------------------------------------\n");

                break;


            case 3:

                printf("你选择的操作是:(3)成绩排序(按平均分)\n");

                printf("请输入选手人数:");
                scanf("%d",&b);

                Singer_result(b);
                sort(b);
                printf("\n-----------------------------------------\n");

                break;


            case 4:


                printf("你选择的操作是:(4)数据查询\n");

                printf("请输入你想查找的选手的编号:");
                scanf("%d",&n);

                find(n);
                printf("\n----------------------------\n");

                break;


            case 5:

            

                printf("你选择的操作是:(5)追加歌手数据\n");

                printf("请输入已录入的选手的人数:");
                scanf("%d",&b);
                printf("请输入需要追加的选手的人数:");
                scanf("%d",&d);
                
                m=b+d;

                addition(b,d);
                printf("将进行自动排序----\n");

                Singer_result(m);
                sort(m);

                printf("\n----------------------------------\n");

                break;


            case 6:

                printf("你选择的操作是:(6)写入数据文件\n");

            
            printf("请输入选手人数:");
            scanf("%d",&b);

                //判断文件是否打开失败
                if((fp=fopen("Campus Singer Grand Prix scoring system.txt","wt+"))==NULL)
        {
                      printf("文件打开失败!\n");
                    exit(0);  //打开失败则退出程序
        }else{
                     printf("打开成功!\n");

                for(i=1;i<=b;i++)  //格式化输出
        {
            fprintf(fp,"num:%d\t\t",Singer[i].num);
              fprintf(fp,"name:%s\t\t",Singer[i].name);
            fprintf(fp,"sum(总分):%5.2f\t",Singer[i].sum);
                fprintf(fp,"result(最终成绩):%5.2f\t",Singer[i].result);
                   fprintf(fp,"sort:%d\n",Singer[i].sort);
        }

                    
        for(i=1;i<=b;i++)  //格式化输入
        {
                fscanf(fp,"%d",&Singer[i].num);
            fscanf(fp,"%s",Singer[i].name);
            fscanf(fp,"%f",&Singer[i].sum);
                fscanf(fp,"%f",&Singer[i].result);
            fscanf(fp,"%d",&Singer[i].sort);
        }

     

        printf("写入完成!\n");
    }

        fclose(fp);

                printf("写入完成!\n");
                printf("-------------------------------------\n");
                break;

            
            case 7:

                exit(0);


            default:
                
                printf("输入错误,请重试!\n");
        }
    }    

    fclose(fp);
    system("pause");
    
}
  • 写回答

3条回答 默认 最新

  • Web Security Loop 2023-03-02 10:41
    关注
    • 在写入数据文件时,打开文件时使用了“wt+”模式,这会导致每次写入文件时都会清空文件内容,并从文件头开始写入,如果文件中已经有内容,就会出现末尾出现一堆“屯”的问题。

    • 你需要使用“at+”模式,它可以在文件末尾追加数据而不是覆盖原有数据。修改代码如下:

    if((fp=fopen("Campus Singer Grand Prix scoring system.txt","at+"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    else
    {
        printf("打开成功!\n");
        for(i=1;i<=b;i++)
        {
            fprintf(fp,"num:%d\t\t",Singer[i].num);
            fprintf(fp,"name:%s\t\t",Singer[i].name);
            fprintf(fp,"sum(总分):%5.2f\t",Singer[i].sum);
            fprintf(fp,"result(最终成绩):%5.2f\t",Singer[i].result);
            fprintf(fp,"sort:%d\n",Singer[i].sort);
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月2日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么