objective-c 代码中的奇怪数字变化

strange number change in objective-c code

我有这个代码来分解在控制台输入的数字和 return 它们,我对负数也做同样的事情,但这是我输入 0123 并且数字得到的奇怪行为转换为 83。我是 objective-c 和 c 的新手,所以我需要一些解释为什么会这样。 我还从首次发布这段代码时注意到,更改实际上发生在 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;
}

它的行为如文档所述 - 整数常量的前导零前缀表示八进制数,因此 0123(以 8 为基数)只是 83(以 10 为基数)。

查看 scanf 的文档以了解这些转换的完整详细信息。也支持十六进制。如果您正在编写 Objective-C 代码,我建议您查看 NSString 解析例程,它对这类事情有更好的接口。