Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Что такое %d\n и зачем он нужен?

Абобус Знаток (360), закрыт 1 год назад
Только очень разжеванно, пожалуйста. ОЧЕНЬ
Лучший ответ
Kolter Gg Мастер (1392) 1 год назад
%d-это спецификатор формата, он указывает на целочисленный тип данных. eg - int n; scanf(“%d”, &n); //Это принимает целое число в качестве входных данных.
Остальные ответы
Byret Оракул (59112) 1 год назад
%d выписывает аргумент (в данном случае n, которое идёт после запятой) в формате int (как выше написали, целочисленный формат; n - целое число).
\n - попросту выписывает новую линию
АбобусЗнаток (360) 1 год назад
\n не надо выносить за кавычки?
Byret Оракул (59112) Абобус, нет, должно быть в кавычках
Jurijus Zaksas Искусственный Интеллект (425045) 1 год назад
%d это место, где будет выведено целое число (decimal), а \n - переход на новую строку (new line).
АбобусЗнаток (360) 1 год назад
\n не надо выносить за кавычки?
Андрей Высший разум (425838) Абобус, Нет - это часть шаблона выводимой строки.
Андрей Высший разум (425838) 1 год назад
" Last matryoshka!!! %d\n" - шаблон выводимой строки.
%d - указывает, что в этом месте в шаблон будет подставлена десятичная запись значения типа int, передаваемого в printf вторым параметром.
\n - стандартная в C-style языках запись служебного символа "перевод строки".
Сергей Гений (56269) 1 год назад
%d - зарезервированный кусок текста, который обрабатывается иначе этой функцией.
Функция считывает символы в кавычках, и выводит их как обычный текст. Но если встречается служебная комбинация %d - обработка и вывод текста прервывается, функция считывает следующий аругумент как d - decimal (тоесть int 4 байта), выводит его как часть текста, и продолжает обработку текста дальше.
Чтобы вывести %d как текст нужно воспользоваться дополнительным слешем \%d (или как-то так, (I hate "C" !)), чтобы функция поняла, что это не служебная комбинация а обычный текст.
Это очень популярная технология подмены. И если она дает сбой, то в играх вместо каких-то правильных слов выводятся эти самые служебные комбинации.
Вы наносите %damage орку! Орк падает замертво!
Андрей Панарин Искусственный Интеллект (225301) 1 год назад
В функции printf форматная строка идет первым аргументом, и весь фиксированный текст должен быть именно там. Второй, третий и последующие аргументы будут подставлены в соответствующие места форматной строки (плейсхолдеры со знаком процента — вроде %d, %f, %s, %c и прочих).

Если сделать перенос внутри форматной строки:
printf("Привет, %d!\n", 34);

то аргумент 34 подставится на место %d (это место для подстановки целого числа, d от слова decimal — десятичное число).

Результат:
Привет, 34!
| ← курсор перешел на новую строчку благодаря символу \n
А если сделать перенос отдельно от форматной строки:
printf("Привет, %d!", "\n", 34);
то на место %d функция подставит значение строки "\n", в виде целого числа (это будет адрес указателя на строку в оперативной памяти, то есть число от балды).
Результат (у меня):
Привет, -383909883!| ← курсор остался в конце строчки, так как в форматной строке нет переноса \n (он во втором аргументе, который не является форматной строкой).
Похожие вопросы