2016-07-05 4 views
0

私はこのコードをコンソールに入力した数字を分割して返しますが、負の数値でも同じですが、ここでは0123と入力して数字が変換されます83。私は客観的に新しいと思います。なぜなら、なぜこのようなことが起こったのかという説明が必要です。 私はまた、このコードをデビューすることで、実際にはメインコードブロックでさえもscarf functionで変更が行われていることに気付きました。ここ は私のコードである:目的コードで奇妙な番号の変更

// 
// 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のドキュメントを参照してください。 16進数もサポートされています。 Objective-Cコードを書いているのであれば、この種のものに対してより良いインターフェースを持っているNSStringの解析ルーチンを見ることをお勧めします。

+1

あなたはより速く入力しました。 :)私が追加したいのは、以下のリンクがscanfとNSStringを使う上で良いことだということです:http://stackoverflow.com/questions/3220823/using-scanf-with-nsstrings –

+2

明確にするには、これだけが起こります'%i'フォーマット指定子で置き換えます。 '%d'では先行ゼロは無視され、10進数が変換されます。 –

関連する問題