2016-07-05 47 views
0

我有这个代码分解在控制台输入的数字并返回它们,我对负数做同样的操作,但这里是奇怪的行为,我输入0123并将数字转换为83。我是objective-c和c的新手,所以我需要一些解释为什么发生这种情况。 我也注意到从推出这个代码,实际上发生在scarf function甚至没有在主代码块的变化。 这是我的代码:奇怪的数字更改在目标c代码

// 
// main.m 
// ex-5.9 
// 
// Created by george on 05/07/2016. 
// Copyright © 2016 george. All rights reserved. 
// Program to reverse the digits of a number 

#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
     // insert code here... 
     int number, right_digit; 


     NSLog(@"Enter your number."); 
     scanf("%i", &number); 

     if(number < 0){   
      number = ABS(number); 
      do { 
       right_digit = number % 10; 
       NSLog(@"%i", right_digit); 
       number /= 10; 
      } while (number != 0); 

      NSLog(@"-"); 

     }else{ 
      do { 
       right_digit = number % 10; 
       NSLog(@"%i", right_digit); 
       number /= 10; 
      } while (number != 0); 
     } 


    } 
    return 0; 
} 

回答

4

它表现为记录 - 前导零前缀的整数常数表示一个八进制数,所以0123(在基座8)只是83(以10为底)。

请查阅scanf的文档以获取这些转换的完整详细信息。十六进制也被支持。如果你正在编写Objective-C代码,我建议你看一下NSString解析例程,它具有更好的接口。

+1

输入得更快。 :)所有我会补充的是,下面的链接是使用scanf和NSString一个很好的SO:http://stackoverflow.com/questions/3220823/using-scanf-with-nsstrings –

+2

要清楚,这只会发生用'%i'格式说明符。使用'%d'时,前导零将被忽略,并且十进制数被转换。 –