2013-07-02 35 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