- (25) Создать функцию printf_real - надстройку над штатными функциями вывода. Набор аргументов printf_real
должен соответствовать набору аргументов функции printf. При вызове printf_real проверяет строку формата и
если в ней используются спецификаторы, требующие невещественных аргументов, завершает свою работу без
какого-либо вывода и возвращет 0. В противном случае, срабатывает как printf, вызывая одну из функций
форматированного вывода и передавая ей свои аргументы, а результат вызова возвращает как свой результат.
Например:
...
if (!printf_real("%f\n%d",17.2,10)) printf("Присутствуют невещественные аргументы\n");
if (!printf_real("%0.2f\n%0.2f",17.2,10.0)) printf("Присутствуют невещественные аргументы\n");
...
Результат:
Присутствуют невещественные аргументы
17.20
10.00
- (25)
Создать функцию, первый аргумент которой - строка формата, описывающая количество и тип последующих аргументов,
а также операции, которые должны быть осуществлены над переданными аргументами.
Строка формата представляет собой указание на совершение арифметических операций сложения ("+")
и вычитания над целочисленными ("%d") или вещественными ("%f") аргументами. Функция возвращает результат вычислений,
либо выводит информацию об ошибке и аварийно останавливает программу. Например:
...
float res;
res=worker("01%d+%d-%f",7,12,-9.1);
printf("%.2f\n",res);
...
Результат:
28.10
- (30+20)
Создать функцию, первый аргумент которой - строка формата, описывающая количество и тип последующих аргументов,
а также операции, которые должны быть осуществлены над переданными аргументами.
Строка формата представляет собой указание на системы счисления, в которых должны быть выведены последующие
целочисленные аргументы ("%XXd"). "XX" представляет собой основание системы счисления, от "02" до "16".
Также возможно указание на аргумент, без перехода к следующему аргументу ("%XXD"). Любые другие символы формата запрещены.
Для вывода одного знака "%" следует указать "%%". Функция поддерживает перевод строки ("\n"). Все
остальные символы выводятся без изменений. Функция возвращает 1, если строка сформирована корректно и 0 в противном случае.
Например:
...
int res;
res=worker("Число %10D равно %16d в шестнадцатиричной системе счисления\nЧисло %10D равно %02d в двоичной системе счисления ",17,10);
printf("\n------\n%d\n",res);
...
Результат:
Число 17 равно 11 в шестнадцатиричной системе счисления
Число 10 равно 1010 в двоичной системе счисления
11
1010
------
1