这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
FILE *infile, *outfile;
int main(){
double landa, mu, lo, blocking_prob[4], mean_arrival_rate,
mean_service_rate, k[4], p[4];
infile = fopen("mm1.in", "r");
outfile = fopen("mm1.out", "w");
fscanf(infile, "%d %d %d %d %d %d",
&mean_arrival_rate, &mean_service_rate,
&k[0],&k[1],&k[2],&k[3] );
lo = mean_arrival_rate / mean_service_rate;
fprintf(outfile,
"Initial setting : mean_arrival_rate = %d , mean_service_rate = %d \n\n",
mean_arrival_rate,mean_service_rate);
for(int x=0;x<4;x++) {
printf("%f \n",pow(lo,k[x]) );
blocking_prob[x]= ( (1-lo)*pow(lo,k[x]) ) / (1- pow(lo,k[x]+1));
fprintf(outfile,"Blocking Probability is %f when K = %d \n\n",
blocking_prob[x],k[x]);
}
}
输出从 pow(lo,k [x])开始,输出错误的数字。
我试图用const替换k [](例如 pow(lo,5)),并且它是正确的。
有没有解决方案?
答案 0 :(得分:1)
%d
不是双精度的正确scanf
格式说明符。您需要使用%lf
代替 1 。
如果您在阅读之后打印出k[]
的值,您会发现它们与您的预期完全不同。
例如,请考虑以下程序:
#include <stdio.h>
int main (void) {
double d1, d2;
printf ("> ");
scanf ("%lf %d", &d1, &d2); // one right, one wrong.
printf ("Input was: %f %f\n", d1, d2);
return 0;
}
运行它会给你:
pax$ ./testprog
> 3.14159 2.71828
Input was: 3.141590 -0.000000
1 C11 7.21.6.2 The fscanf function /10
说得最好:
如果 [接收值的对象] 没有合适的类型,或者无法在对象中表示转换结果,则行为未定义
答案 1 :(得分:0)
您需要使用%lf
的{{1}}格式说明符,而不是double
%d