printf()改变C中变量的处理

时间:2012-07-09 19:38:42

标签: c variables loops printf

我的程序中有一个非常简单的函数,使用割线方法来查找函数的根。它适用于printf(),如下所示。但如果我把它评论出来,循环就会无休止地重复。我不知道为什么......

我读过有关printf更改变量的内容,但我没有看到任何更改变量存储的内容。我错过了什么吗?打印它不是一个很好的解决方案,因为迭代并不重要,而且函数被调用了数百万次。

double guess1=500.;
double y1=estimater(r,volume,guess1,adm,tm,rr[r]);
double guess2=adm/30.;
double y2=estimater(r,volume,guess2,adm,tm,rr[r]);
int i;
double guess3=0.;
double y3;
double tol =heightTOL;
int secmax=SECANTMAX;
for(i=1;i<=secmax;i++){
    guess3=guess2-y2*(guess2-guess1)/(y2-y1);
    if(guess3>adm/2.){
        guess3=adm/2.;
    }
    if(guess3<=0.){
        guess3=0.;
    }
    y3=estimater(r,volume,guess3,adm,tm,rr[r]);
    y1=y2;
    y2=y3;
    guess1=guess2;
    guess2=guess3;
    if(fabs(guess2-guess1)<tol){
        break;
    }
    if(i==secmax){
        printf("\nRan out of iterations in height finder\n");
    }
    printf("%d     %f",i,guess3); //THIS ONE HERE!!!!!!!!
}
return guess3;

1 个答案:

答案 0 :(得分:1)

printf根本没有更改您的数据。 printf函数系列对数据产生影响的唯一方法是使用%n格式说明符(写入您传递地址的变量)或者您正在执行的操作调用未定义的行为,例如传递错误的格式参数。你没有在这里做任何一件事(你的格式字符串是正确的),所以你的错误在其他地方。

检查所有数组访问是否在边界内。尝试在Valgrind或其他验证器中运行代码以尝试查找内存错误。