2013-07-02 58 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)使得記憶更容易,並避免這些類型迷惑。 –

回答

1

你想

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

使用:

if (j = 1) 

設置j等於1,並且基本上是

if (1) // always true