Ошибка, когда я ввожу 0 перед числом

У меня проблема, когда я хочу ввести 0 перед числом, но все работает нормально, когда я ввожу только число.

#include <iostream>
#include <stdio.h>

int main()
{
    int input, output;

    printf("Enter number : ");
    scanf("%i",&input);

    output = input % 7;
    printf("%i", output);

    return 0;
}

Например :

  • когда я даю ввод 8, вывод 1. Но когда я ввожу 08, выводится 0
  • когда я даю ввод 100, вывод 2. Но когда я ввожу 0100, выводится 1

Я знаю, что просто не набирайте 0 перед номером быстрее, но мне интересно, можно ли набирать 0 перед номером без ошибки.

Я использую Code::Blocks 16.01 (MinGW) в Windows 10 x64.


person Community    schedule 22.09.2017    source источник
comment
Если вы вводите начальный 0, вы выбираете восьмеричное представление чисел, например. 0100 в восьмеричном представлении совпадает с 64 в десятичном представлении. 64 % 7 = 1. Таким образом, это не ошибка.   -  person camelCase    schedule 22.09.2017
comment
@camelCase Я вижу, но мне интересно, могу ли я ввести 0 перед числом, не изменяя его на восьмеричное (оставаться десятичным / с основанием 10)   -  person    schedule 22.09.2017
comment
@sandyKhosasi Используйте %d.   -  person Hatted Rooster    schedule 22.09.2017
comment
scanf зло.   -  person Jabberwocky    schedule 22.09.2017


Ответы (1)


Использование %i в сочетании с префиксом 0 (08, 0100 и т. д.) заставляет scanf интерпретировать ввод как восьмеричное число, основанное на 8, а не на 10. Если вы хотите, чтобы scanf игнорировал это, вы должны вместо этого использовать %d.

person Hatted Rooster    schedule 22.09.2017