2016-07-05 5 views
0

У меня есть этот код, чтобы разбить числа, введенные на консоли, и вернуть их, и я делаю то же самое для отрицательных чисел, но вот странное поведение, которое я вводил 0123, и число преобразуется в 83. Я новичок в объектах 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

Вы набрали быстрее. :) Все, что я добавил бы, это то, что следующая ссылка является хорошим SO при использовании scanf и NSString: http://stackoverflow.com/questions/3220823/using-scanf-with-nsstrings –

+2

Чтобы быть ясным, это произойдет только с спецификатором формата '% i'. С '% d' ведущие нули игнорируются, а десятичное число преобразуется. –