Например, дано число 123456789, нужно разделить его на отдельные цифры, 1, 2, 3, 4, 5, 6, 7, 8, 9, чтобы их потом можно было бы присвоить к какой-то переменной. И как называется сам этот процесс, чтобы поподробнее прочитать про эту функцию потом.
9 ответов 9
Если честно, то мне трудно понять смысл этих строчек:
Вот тут я запутываюсь, а точнее в форматах ( % ).
Кратко описываю непонятные Вам места с форматами. Подробно можно прочитать в man 3 fprintf.
Функции семейства printf ( sprintf() , fprintf() и другие) выводят значение своих аргументов в виде последовательности символов в соответствии с форматами, передаваемыми аргументом функции в виде строки. printf() выводит символы в stdout , fprintf() — в указанный FILE * , а sprintf() — в строку (массив char ) в вашей программе.
Текст строки форматов можно разделить на собственно форматы, «управляющие» (Control) и просто символы.
Просто символы копируются на выход «как есть».
Control символы управляют выводом текста на терминал (NewLine, Tab и пр.), их записывают в форматах, начиная символом «бэкслеш» («»). Например:
— Newline, — табуляция, g — bell (терминал пищит). Также (это по правилам записи строковых констант в С) надо писать " для вывода кавычки. Если надо вывести сам символ «», то его надо удвоить: \ .
Символ «%» в строке форматов имеет особое значение. Он начинает очередной формат, который говорит, в каком виде должен быть выведен следующий аргумент и какого он типа. Например:
- %d — вывести аргумент типа int в виде десятичного числа,
- %c — вывести аргумент типа char (или младший байт int ) как символ (то есть без преобразований),
%x — вывести аргумент типа int в виде шестнадцатеричного числа
и так далее. Форматов много, они удобны. Прочтите man и пользуйтесь.
Возвращаясь к указанным Вами непонятным местам в программе:
sprintf(digs, "%d", num); сформирует в массиве digs последовательность цифр числа и переменной num в соответствии с форматом %d (то есть выводит в строку число в десятичном виде);
if (strlen(digs) > idig) проверяет, есть ли вообще цифра номер idig . Например Вы хотите вывести шестую цифру числа, а в числе (например 3) цифра всего одна.
printf ("%d-th digit in %d is ‘%c’
", idig, num, digs[idig — 1]); вывести в stdout:
- первый %d — переменную idig (номер цифры в числе) как десятичное число,
- второй %d — переменную num как десятичное число,
- %c — символ из массива digs (искомую цифру) «как есть».
Надеюсь, теперь стало понятнее. А вообще, читайте, читайте и еще раз читайте документацию.
Сообщество, где люди делятся уникальным опытом
Вопросы и ответы по любой теме от IT сообщества
Помогаем строить карьеру в IT-индустрии
Биржа удаленной работы для IT-специалистов
Хабр Q&A — вопросы и ответы для IT-специалистов
Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.
От пользователя, с помощью функции input , я получаю шестизначное число.
После этого нужно разбить его на 6 самостоятельных чисел, например, в список.
Как этого можно добиться?
Например, число 123456 , надо разбить на 1, 2, 3, 4, 5, 6