函数以不同于我放入的顺序运行

首先感谢您花时间阅读这篇文章。 我几乎有这个计划,但有问题,我似乎无法动摇。 这是该计划

#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"); } 

所以程序应该模拟一个24小时的泵操作,以1小时的增量logging泵每小时开启还是closures以及由此产生的体积。 每个城市和它的入口将在不同的行,秩序应该是Valdez Glenallen托克和费尔class克斯。 然而,当我运行程序的顺序从上到下变成费尔class克斯Valdez Glenallen和托克。 更麻烦的是我可以改变体积终点(Pumps1),体积终点(Pumps2),体积终点(Pumps3),体积终点(Pumps4)到体积终点(Pumps4),体积终点(Pumps3),体积终点(Pumps2),体积终点(Pumps1)

在Excel表格上,Fairbanks Valdez Glenallen和Tok留在这个城市。 此外,它看起来最后两行是相同的,即使它们应该有随机值。 我真的不能看到我失去了什么帮助将不胜感激。 感谢您的时间。

感谢您的时间。

您尝试每次重新打开该文件:

 void volumefinal( struct Pumps pump ) 

如果你删除该调用,它工作正常:

  void volumefinal( struct Pumps pump ) { // fp=fopen(filename,"a"); <---- fprintf(fp,"%s,\t",pump.cityname); int rangeLow, rangeHigh; // .. }