«Запишите программу entab, которая заменяет строки пробелов на минимальное количество вкладок и пробелов для достижения одинакового интервала. Используйте те же табуляции, что и для detab. Когда либо вкладка, либо один пустой достаточно для достижения табуляции, которой следует отдавать предпочтение? "Учебная книга для ответов K & R 1.21
Я сам выполнял это упражнение, и ответ книги имеет другое решение. Я не понимаю математическую формулу, которая выполняется, когда вкладка считывается из входного потока. Вот код:
#include <stdio.h>
#define TABINC 8
main()
{
int c, nb, nt, pos;
nb = 0;
nt = 0;
for (pos = 1; (c =getchar()) != EOF; ++pos)
if (c == ' '){
if (pos % TABINC != 0)
++nb;
else {
nb = 0;
++nt;
}
}
else {
for (; nt > 0; --nt)
putchar('\t');
if (c == '\t')
nb = 0;
else
for (; nb > 0; --nb)
putchar(' ');
putchar(c);
if (c == '\n')
pos = 0;
else if (c == '\t')
pos = pos + (TABINC - (pos - 1) % TABINC) - 1;
}
}
Часть Я не понимание заключается в следующем:
else if (c == '\t')
pos = pos + (TABINC - (pos - 1) % TABINC) - 1;
Я могу видеть через отладку в визуальной студии, что эта конструкция приносит позы к следующей закладке стоп, когда вкладка происходит из входного потока. Это верно?
То, что я действительно не понимаю, - это то, как эта формула работает или как она придумала это. это общая формула, которая возникает при программировании? Это полезно? У него есть имя?
Редактировать: Я понимаю, что делает оператор modulo. Извините, я не уточнил это.
Я ценю любой вход.