在Textfield中输入0.0时,iOS调试器崩溃

时间:2012-04-20 02:43:05

标签: c++ ios xcode

我目前正在使用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工作了......任何输入都很受欢迎。

谢谢

1 个答案:

答案 0 :(得分: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连续的elses。

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

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

if (...) {
  self.display3.text = @"1";
}