有关C语言文件的应用

img


我的思路是要写出随机数,然后应该是要用到文件的相关知识,存在文本文件中,然后进行计算。

思路大概是:先产生100个商场序号及四个季度的销售额写入文件,然后再读取这个文件,然后计算一年的销售总额读入商场结构数组,再写入文件,malls.txt文件应该是自动生成在编译生成的exe文件的同一个目录下,下面是一个实现,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct mall{
    int id;
    double quarterlySales[4];
    double yearSales;
};

int main(void){
    
    struct mall malls[100];
    FILE * fp=fopen("malls.txt","w+");
    if(fp==NULL){
        printf("打开文件或创建文件失败!\n");
        return 0;
    } 
    
    int i=0;
    int idarr[100];
    for(i=0;i<500;i++){ //初始化500个商场序号,用于后面产生随机数从中取走一个商场序号 
        idarr[i]=i+1;
    }
    
    printf("开始生成销售数据!\n");
    srand(time(0)+rand()); //用当前时间再加随机数做随机数种子,以便让每一次随机不一样 
    i=0;
    int k;
    int num;
    double j;
    while(i<100){
        
        num=rand()%500;  //产生一个下标 ,用于从商场序号数组中取走一个商场序号 
        while(idarr[num]==0){   //如果这个位置的商场序号被取走,则重新再生成一个下标再次取一次序号,直到取到序号 
            num=rand()%500;
        
        }
        
        if(idarr[num]!=0){ //取到序号后写入文件 
        //    malls[i].id=idarr[num];
            fprintf(fp,"%d ",idarr[num]);
            idarr[num]=0;  //商场序号数组当前位置置0,表示这个位置的商场序号已被取走 
        }    
        
        
        for(k=0;k<4;k++){  //产生一个1到10万之间的数,表示每个季度的销售额 
            j=(double)(rand()%100000+1);
        //    malls[i].quarterlySales[k]=j;
            fprintf(fp,"%.2lf ",j);
        }
            
        i++;
    }    
    fclose(fp);
    printf("销售数据已生成!\n"); 
    
    printf("开始写入销售数据!\n"); 
    fp=fopen("malls.txt","r");
    if(fp==NULL){
        printf("打开文件失败!\n");
        return 0;
    } 
    
    i=0;
    while(i<100){  //从文件读取100个商场的序号及其每个季度的销售额,并计算每年的销售总额到 商场结构数组中 
        fscanf(fp,"%d%lf%lf%lf%lf ",&malls[i].id,
        &malls[i].quarterlySales[0],&malls[i].quarterlySales[1],
        &malls[i].quarterlySales[2],&malls[i].quarterlySales[3]);
        malls[i].yearSales=malls[i].quarterlySales[0]+malls[i].quarterlySales[1]+
        malls[i].quarterlySales[2]+malls[i].quarterlySales[3];
        i++;
    }
    fclose(fp);
    printf("销售数据已写入!\n");
    printf("按任意键开始计算并写入一年的销售总额!"); //此时暂停,用于查看和备份malls.txt生成的数据是否正常 
    getchar();
    
    
    printf("开始计算和写入一年的销售总额。\n"); 
    fp=fopen("malls.txt","w");
    if(fp==NULL){
        printf("打开文件失败!\n");
        return 0;
    } 
    
    
    i=0;
    while(i<100){  //加上计算的一年的销售总额,再次写入文件 
        fprintf(fp,"%d %.2lf %.2lf %.2lf %.2lf %.2lf ",malls[i].id,
        malls[i].quarterlySales[0],malls[i].quarterlySales[1],
        malls[i].quarterlySales[2],malls[i].quarterlySales[3]
        ,malls[i].yearSales);
        
        i++;
    }
    fclose(fp);
    printf("一年的销售总额已写入!\n");
    printf("程序退出!\n");
    
    return 0;
    
}

img