0

我目前正在 Xcode 中开发一个 iOS 应用程序,并且我想出了计算有效数字位数的代码。它是用 C++ 编写的,但我做了一些更改以使其正常工作。每当我输入零值时,它就会崩溃,但其他任何东西都可以正常工作。

我的代码如下:

- (IBAction)sigFigCount:(UITextField *)thetextfield
{
length = 0;
if (thetextfield == _textfield1)
{
    if ([thetextfield.text length] > 0)//If TextField Has More Than 0 digits...
    {
        text1 = std::string([_textfield1.text UTF8String]);
        while (text1.at(0) == '0' || text1.at(0) == '.')//Trim Leading Zeros...
        {
            text1 = text1.substr(1);
        }
        length = text1.length();
        decimal = text1.find('.');
        if (decimal >= 0 && decimal < text1.length())//Dont count decimal as sig fig...
        {
            length -= 1;
        }
        if ([[_textfield1 text] doubleValue] == 0.0)
        {
            NSLog(@"HERE");
            self.display3.text = @"1";
        }
        NSString *siggy = [NSString stringWithFormat:@"%i", length];
        self.display3.text = siggy;
    }
    if ([thetextfield.text length] == 0)
    {
        length = 0;
        NSString *ifzero = [NSString stringWithFormat:@"%i", length];
        self.display3.text = ifzero;
    }
    if ([[thetextfield text] doubleValue] == 0.0)
    {
        newLength = 1;
        NSString *zeroVal = [NSString stringWithFormat:@"%i", newLength];
        self.display3.text = zeroVal;
    }
    NSString *norm = [NSString stringWithFormat:@"%i", length];
    self.display3.text = norm;
}
}

请帮助,我相信它与数字在内存中的表示方式有关......但是当我把它放在一个while语句中时,NSLog工作......任何输入都表示赞赏。

谢谢你

4

1 回答 1

0
while (text1.at(0) == '0' || text1.at(0) == '.')//Trim Leading Zeros...
        {
            text1 = text1.substr(1);
        }

我相信这就是你的问题所在。您的测试字符串 '0.0' 仅包含 0 和 . 人物。循环 3 次后, text1 是空字符串,但您仍在尝试访问第一个字符。

这条线也可能不符合您的预期: if ([[thetextfield text] doubleValue] == 0.0)

任何不是数字的东西都会被转换为 0.0,这[@"foo" doubleValue] == 0.0也是如此。

这里还有很多其他问题,比如使用 UTF8String。如果用户输入的不是低 ascii 字符,就会发生奇怪的事情。

你真的不应该在这里需要任何 C++。仅使用目标 C 将非常容易。

其他一些评论...您可能想要 if/else if/else if 而不是仅仅 3 个连续的 else。

最后一个 if 也可以很容易地转换为:

   if ([[thetextfield text] doubleValue] == 0.0)
    {
        newLength = 1;
        NSString *zeroVal = [NSString stringWithFormat:@"%i", newLength];
        self.display3.text = zeroVal;
    }

if (...) {
  self.display3.text = @"1";
}
于 2012-04-20T03:49:57.750 回答