Как сделать функцию без printf или scanf - C (СИ)
Формулировка задачи:
Как сделать функцию для такого кода, но чтоб в функции не было printf'а или scanf'a?
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
printf("%d", x);
return 0;
}Решение задачи: «Как сделать функцию без printf или scanf»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main() {
int x;
char buffer[256];
/* scanf */
fgets(buffer, sizeof buffer, stdin);
x = atoi(buffer);
/* printf */
char *p = buffer + sizeof buffer;
*--p = '\0';
for (int s = x >= 0 ? x : -x; s != 0; s /= 10)
*--p = '0' + s % 10;
if (x == 0)
*--p = '0';
else if (x < 0)
*--p = '-';
fputs(p, stdout);
}
Объяснение кода листинга программы
- Подключение необходимых библиотек: iostream.h и stdlib.h
- Объявление переменных:
- x — целочисленная переменная
- buffer — массив символов
- Замена функции scanf:
- чтение строки с помощью функции fgets
- преобразование строки в целое число с помощью функции atoi
- Замена функции printf:
- инициализация указателя p на последний символ массива buffer
- обнуление последнего символа массива buffer с помощью оператора деления по модулю /
- Цикл for:
- инициализация переменной s значением x, если x больше или равно нулю, иначе -x
- установка значения переменной s на остаток от деления на 10
- добавление символа '0' + s в конец строки, выводимой на экран
- Проверка значения переменной x:
- если x равно нулю, то добавляется символ '0' в конец строки
- если x меньше нуля, то добавляется символ '-' в конец строки
- Вывод строки на экран с помощью функции fputs