2013-07-02 3 views
0

В настоящее время я пишу некоторые код для имитации отжига в C. У меня возникли проблемы с этой функцией:Неожиданное Выход из функции метрополий в C

int metrop (E, E1, T) 
{ 
    int j; 
    if (exp((-E-E1)/T) > ran()) 
    j = 2; 
    printf("Random# %lf\n",ran()); 
    if (E-E1<0) 
    j = 2; 

    else 
    j = 0; 

    if (j=1) 
    printf("Accepted %d",j); 
    if (j=0) 
    printf("Rejected"); 
    return(j); 
} 

Независимо от входных данных для E, E1, и T, "if (j = 1) printf (" Accepted% lf ", j);" как представляется, выполняется, выдавая результат «Принято 1». Несмотря на то, что в этом коде невозможно, чтобы j было равно 1. Я подозреваю, что могу ссылаться на неправильные типы данных или что-то в этом роде. У кого-нибудь есть идеи?

Спасибо!

+11

', если (J == 1)', 'не, если (j = 1) '... –

+2

у вас есть около 0 опыта программирования, не так ли? Не отступайте на 1, не предполагайте, что отступ определяет блок, не предполагайте, что ran() возвращает тот же номер дважды ... –

+1

пытается, если (1 == j) облегчает запоминание и избегает таких obfuscations. –

ответ

1

Вы хотите

if (j == 1) // j == 1 evaluates to true if j is 1, evaluates to false otherwise 

Использование:

if (j = 1) 

Наборы J, равный единице, и, по существу,

if (1) // always true 
Смежные вопросы