2015-04-09 5 views
1

Вот мой код:Неправильный выход при выполнении двойного массива в пау()

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

Выходные начинается с мощна (вот, к [х]), он выводит неправильный номер.

Я попытался заменить k [] на const (например, pow (lo, 5)), и он становится прав.

Есть ли решение?

+2

Что содержит k? какой неправильный номер выводит? – User

+0

Пожалуйста, открепите свой код перед отправкой вопроса. – Lundin

+1

Вы сканируете цифры 'double'floating-point с'% d'. Вы должны использовать '% lf'. (Ваш компилятор предупредит вас о таких ошибках при включении предупреждений.) –

ответ

1

%dне правильный scanf спецификатор формата для двойного. Вы должны использовать %lf вместо .

Если вы хотите распечатать значения для 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 

C11 7.21.6.2 The fscanf function /10 говорит, что лучше:

Если [объект получает значение] не имеет соответствующий тип, или если результат преобразования не могут быть представлены в объекте, поведение не определено

+0

Спасибо. Я понял. –

0

Вы должны использовать %lf спецификатор формата для double вместо %d, который предназначен для int

 Смежные вопросы

  • Нет связанных вопросов^_^