2012-04-20 70 views
0

我目前正在使用Xcode的iOS应用程序,并且已经提出了用于计算有效位数的代码。它是用C++编写的,但我做了一些改变以使其起作用。每当我输入一个零值,它崩溃,其他任何工作都很好。iOS调试器在文本框中输入0.0时崩溃

我的代码如下:

- (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; 
} 
} 

请帮帮忙,我相信它有事情做与数字在内存中表现的方式......但NSLog的工作时,我把它放在一个while语句...任何输入赞赏。

谢谢

+0

什么崩溃:

最后,如果也可以很容易地从转换?崩溃日志在哪里? – 0x8badf00d 2012-04-20 03:14:57

+0

真的没有崩溃日志,它的输出是“terminate called throwing an exception”并且iOS Simulator退出。 – JoeyLaBarck 2012-04-20 03:33:33

回答

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

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

此行也可能不会做你所期望的: 如果([thetextfield文本]中的doubleValue] == 0.0)

什么,这不是一个数字将被转换为0.0,所以[@"foo" doubleValue] == 0.0是真好。

这里还有其他一些问题,比如使用UTF8String。如果用户输入的内容不是低级别的ASCII字符,就会发生奇怪的事情。

这里真的不需要任何C++。只有客观的C才会很容易。

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

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

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

谢谢Matt,我只有小数点,并且不允许除数字和小数点以外的任何字符。我在while循环'&& [_textfield1 text] doubleValue]!= 0.0)'中添加了语句,因此如果值为零,它将不会执行while循环。但由于某种原因,如果我输入0.00,则表示3 sig figs。我无法弄清楚为什么。 – JoeyLaBarck 2012-04-20 04:02:56