является допустимой двоичной константой в C ++ 14. Пунктуация делает разбор C ++ 14 или более поздней версии значительно сложнее, чем до разрешения кавычек.

:

int a = 0987654321;
printf("%d",a);

Код 2:

int a;
scanf("%d",&a);
printf("%d",a);

Здесь, если мы введем 0987654321, то он напечатает то же самое, но в 1-м фрагменте кода, он выдаст ошибку, что недопустимое значение 9 в восьмеричной константе.

 Jonathan Leffler07 нояб. 2017 г., 07:28
Обратите внимание, что с%iвход0987654321 вернусь0оставив9 во входном буфере для интерпретации следующей операцией ввода.
 M.M07 нояб. 2017 г., 06:51
В Scanf,%d означает читать базу 10. Использование%i рассматривать ведущий ноль как восьмеричный спецификатор. Не забудьте проверить возвращаемое значение scanf

Ответы на вопрос(1)

Решение Вопроса

которые вы можете использовать при написании кода на C -

шестнадцатеричный(0x123A)двоичный(0b1011) - Не поддерживается стандартом C, но является расширением, предоставляемым такими компиляторами, какgcc.восьмеричный(01237)Десятичный(1234) - пожалуй, самый распространенный.

Здесь вы используете восьмеричное представление (потому что оно начинается с0). Значение каждой цифры является основанием 8. В результате каждая цифра после0 может быть только в диапазоне[0-7]. 9 не является действительной восьмеричной цифрой и, следовательно, компилятор жалуется.

Если вы действительно хотите использовать десятичное представление, вы можете удалить0 как -

int a = 987654321;

Во втором примере это на самом деле работает нормально, потому чтоscanf с участием%d всегда сканирует как десятичное представление и9 является действительной десятичной цифрой.

 BLUEPIXY07 нояб. 2017 г., 06:53
0b1011 такое расширение (GCC), верно?
 Ajay Brahmakshatriya07 нояб. 2017 г., 06:55
@ BLUEPIXY да, действительно, тыверный, Я добавлю примечание рядом с Binary в моем ответе. Спасибо
 BLUEPIXY07 нояб. 2017 г., 06:54
Пытатьсяgcc test.c -std=c11 -pedantic
 Ajay Brahmakshatriya07 нояб. 2017 г., 06:53
@ BLUEPIXY позвольте мне проверить стандарты, всего минуту.
 Jonathan Leffler07 нояб. 2017 г., 07:27
Обратите внимание, что C ++ 14 добавляет двоичные константы в язык C ++. Это также позволяет добавлять группировку к номерам с' персонажи:0b0010'0011'1101'1010 является допустимой двоичной константой в C ++ 14. Пунктуация делает разбор C ++ 14 или более поздней версии значительно сложнее, чем до разрешения кавычек.

Ваш ответ на вопрос