Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 函数的运行顺序与我输入的顺序不同_C_Excel - Fatal编程技术网

C 函数的运行顺序与我输入的顺序不同

C 函数的运行顺序与我输入的顺序不同,c,excel,C,Excel,首先,感谢你花时间阅读这篇文章。我几乎已经弄明白了这个程序,但有一个问题,我似乎无法动摇。这是节目单 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> FILE *fp; char str[100]; char* filename; char* filename = str; int timer; s

首先,感谢你花时间阅读这篇文章。我几乎已经弄明白了这个程序,但有一个问题,我似乎无法动摇。这是节目单

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

    FILE *fp;
    char str[100];
    char* filename;
    char* filename = str;
    int timer;


struct Pumps
{
    char cityname[30];
    int volume;
    float priceperpump;
    float priceperactiv; /*150 dollars each time the pump turns on*/
    int activated;
    int hourInput;
    int hourOutput;
};

struct Pumps Pumps1;
struct Pumps Pumps2;
struct Pumps Pumps3;
struct Pumps Pumps4;

void functionInput(void)
{
    /*City 1*/
    strcpy(Pumps1.cityname, "Valdez");
    Pumps1.priceperactiv = 210;

    /*City 2*/
    strcpy(Pumps2.cityname, "Glenallen");
    Pumps2.priceperactiv = 210;

    /*City 3*/
    strcpy(Pumps3.cityname, "Tok");
    Pumps3.priceperactiv = 210;

    /*City 4*/
    strcpy(Pumps4.cityname, "Fairbanks");
    Pumps4.priceperactiv = 210;
}

int uniform_distribution_ranges(int rangeLow, int rangeHigh)
{
    double myRand = rand()/(1.0 + RAND_MAX);
    int range = rangeHigh - rangeLow +1;
    int myRand_Scaled = (myRand * range ) + rangeLow;
    return myRand_Scaled;
}


void volumefinal( struct Pumps pump );

int main(void)
{


    printf("\n Enter the filename :");

    gets(str);

    printf("\n Creating %s.csv file",str);

    filename=strcat(filename,".csv");

    functionInput();

    fp=fopen(filename,"w");

volumefinal( Pumps1 );
volumefinal( Pumps2 );
volumefinal( Pumps3 );
volumefinal( Pumps4 );

fclose(fp);

return 0;

}

void volumefinal( struct Pumps pump )
{

    fp=fopen(filename,"a");

    fprintf(fp,"%s,\t",pump.cityname);

    int rangeLow, rangeHigh;

    /* Define Volume, initial with uniform distribution */
    rangeLow=40;
    rangeHigh=80;

    pump.volume = uniform_distribution_ranges(rangeLow, rangeHigh);

    /*Define Input,  with uniform distribution */
    rangeLow=4;
    rangeHigh=10;

    pump.hourInput = uniform_distribution_ranges(rangeLow, rangeHigh);  

    /*Define Output,  with uniform distribution */
    rangeLow=15;
    rangeHigh=20;

    pump.hourOutput = uniform_distribution_ranges(rangeLow, rangeHigh); 

    srand ( time(0) );

    for(timer=0;timer<24;timer++)
    {

    /*Define input,with uniform distribution */

        pump.activated = (rand()% 2);   
        if(pump.volume < 45)
        {
            pump.activated = 0;
            pump.volume = pump.volume + pump.hourInput;
        }

        else
        {
            pump.activated = 1;
            pump.volume = pump.volume + pump.hourInput - pump.hourOutput;
        }

        fprintf(fp,"%d,\t",pump.activated);
        fprintf(fp,"%d,\t",pump.volume);

    }
    fprintf(fp,"\n");
}
#包括
#包括
#包括
#包括
文件*fp;
char-str[100];
字符*文件名;
char*filename=str;
整数定时器;
结构泵
{
char cityname[30];
国际卷;
浮子泵;
浮动价格每次泵启动时,浮动价格为150美元*/
int激活;
国际胡林普特;
内部输出;
};
结构泵1;
结构泵2;
结构泵3;
结构泵4;
void函数输入(void)
{
/*城市1*/
strcpy(Pumps1.cityname,“Valdez”);
泵1.priceperactiv=210;
/*城市2*/
strcpy(Pumps2.cityname,“Glenallen”);
泵2.priceperactiv=210;
/*城市3*/
strcpy(Pumps3.cityname,“Tok”);
泵3.priceperactiv=210;
/*城市4*/
strcpy(Pumps4.cityname,“费尔班克斯”);
泵4.priceperactiv=210;
}
整数均匀分布范围(整数范围低,整数范围高)
{
双myRand=rand()/(1.0+rand_MAX);
int范围=范围高-范围低+1;
int myRand_Scaled=(myRand*范围)+rangeLow;
返回myRand_刻度;
}
空隙体积最终(结构泵);
内部主(空)
{
printf(“\n输入文件名:”);
获取(str);
printf(“\n正在创建%s.csv文件”,str);
文件名=strcat(文件名为“.csv”);
函数输入();
fp=fopen(文件名,“w”);
体积最终(泵1);
体积最终(泵2);
体积最终(泵3);
体积最终(泵4);
fclose(fp);
返回0;
}
空隙体积最终值(结构泵)
{
fp=fopen(文件名,“a”);
fprintf(fp,“%s\t”,pump.cityname);
int rangeLow,rangeHigh;
/*定义体积,初始均匀分布*/
rangeLow=40;
范围高=80;
泵量=均匀分布范围(范围低、范围高);
/*定义输入,均匀分布*/
rangeLow=4;
范围高=10;
pump.hourInput=均匀分布范围(范围低、范围高);
/*以均匀分布定义输出*/
rangeLow=15;
范围高=20;
pump.hourOutput=均匀分布范围(范围低、范围高);
srand(时间(0));

对于(timer=0;timer,每次尝试在以下位置重新打开文件:

void volumefinal( struct Pumps pump )
如果删除该调用,则效果良好:

    void volumefinal( struct Pumps pump )
    {
        // fp=fopen(filename,"a"); <----

        fprintf(fp,"%s,\t",pump.cityname);

        int rangeLow, rangeHigh;
        // ..
    }
void volumefinal(结构泵)
{

//fp=fopen(文件名“a”);我以前尝试过删除该行,但如果您这样做,它将不会编译,因为fp在函数中没有定义,a将附加文件而不是创建新文件。我将尝试关闭该块中的文件,看看会发生什么。@AKNorth
fp
是一个全局变量,而该行无论如何都不是一个声明诀窍是,谢谢你让我朝着正确的方向前进,所以问题是C不能连续两次打开同一个文件而没有问题。相反,你可以打开它并找到它,关闭它,然后再打开并再次找到它。为了解决这个问题,我只需在void volumefinal(struct Pumps)中添加fclose(fp);即可