2016-07-05 68 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'時,前導零將被忽略,並且十進制數被轉換。 –