относительно о функции записи,
Я хочу показать все цифры номера, как " 0123456789"
в Unix я использовал vim и набрал код, вот так:
#include <unistd.h>
void ft_print_numbers(void)
{
int i;
i=0;
while(i <= 9)
{
write(1, &i, 1);
i++;
}
}
int main()
{
ft_print_numbers();
}
но результат, который я увидел, был ничтожен... Я не вижу ничего, кроме пустоты...
Что не так с моим кодом?
Спасибо за вашу помощь.



Ответы - относительно о функции записи, / concerning about write function,

27.01.2020 10:27:42
Не существует известной схемы кодирования, в которой целочисленные цифры равны их символу.
При использовании наиболее распространенной кодировки ASCII значение символа '0'
равно целому значению 48
.
Теперь хорошая новость: спецификация C требует, чтобы все цифры были закодированы последовательно. Это означает'1'
будет 49
и т. д. до '9'
, то 57
.
Таким образом, вы можете выполнить цикл от '0'
до '9'
и записать это значение вместо этого:
for (int8_t c = '0'; c <= '9'; ++c)
write(STDOUT_FILENO, &c, 1);
[Обратите внимание, что я изменил магическое число 1
на символ STDOUT_FILENO
, так как магические числа затрудняют чтение, понимание и поддержку кода]


for
(это не функция) в соответствующий while
, только не используя магическое число write
.


STDOUT_FILENO
-это макрос препроцессора, который расширяется до 1
, но там, где 1
может означать что угодно или ничего особенного, STDOUT_FILENO
читаем и понятен и сразу же распознается как стандартный выходной STDOUT
).

