Objective c iOS中的试错do while语句

Objective c iOS中的试错do while语句,objective-c,do-while,Objective C,Do While,我对iOS编程/目标c还不熟悉,我正在尝试进行迭代试错计算,但我被卡住了。通常,此代码在excel VBA中工作,因此我不确定如何在obj C中解决此问题: - (IBAction)calculate:(id)sender { static float friction=2; static float difference; float Re = [pipe_id.text floatValue] * [fluid_velocity.text floatValu

我对iOS编程/目标c还不熟悉,我正在尝试进行迭代试错计算,但我被卡住了。通常,此代码在excel VBA中工作,因此我不确定如何在obj C中解决此问题:

- (IBAction)calculate:(id)sender {

    static float friction=2; 

    static float difference;


    float Re = [pipe_id.text floatValue] * [fluid_velocity.text floatValue] / [kin_viscosity.text floatValue];

ReynoldsNo.text = [[NSString alloc]initWithFormat:@"%6.2f", Re]; 


do{

     float Colebrook1 = 1/powf(friction,0.5);

     float Colebrook2 = -2*log10f([RelativeRoughness.text floatValue]/(3.7*[pipe_id.text floatValue]) + 2.51/(Re*powf(friction,0.5))); 

     float difference = fabsf((Colebrook1-Colebrook2)*1000);                           

     friction = friction - 0.000001;


     FrictionFactor.text = [[NSString alloc]initWithFormat:@"%6.2f", friction]; 

     Cole1.text = [[NSString alloc]initWithFormat:@"%6.2f", Colebrook1];

     Cole2.text = [[NSString alloc]initWithFormat:@"%6.2f", Colebrook2];         

    }while (difference > 0.000001);


}

所以当我编译这个时,摩擦力的值保持在2。我的循环不起作用了,所以整个试错过程都失败了。我需要一些帮助来了解如何将其写入目标C。感谢您的帮助,ALM。

请注意块范围。内部的
差异
会遮挡外部,因此您可能希望通过简单地删除
浮动
来避免重新声明它


此外,作为惯例提示,请保留类的大写标识符。

这一行是您的问题:

float difference = fabsf((Colebrook1-Colebrook2)*1000);
您已经在循环外部声明了变量差异;不需要在循环中再次声明它

你可能想说:

difference = fabsf((Colebrook1-Colebrook2)*1000);

另外,您确定您的外部声明需要是静态的吗?这意味着它的值在方法调用之间保持不变。这是一段有效的代码,但很少见。

非常感谢Stephen,这很有帮助。一开始,我遇到了一个问题,您使用的是一个未声明的变量,所以后来我尝试在循环外声明该变量:static float摩擦力=2;我之所以使用static,是因为我认为变量不会出现在循环中。