Упражнение 1-21, C Язык программирования, Объяснение последней строки - PullRequest
0 голосов
/ 15 апреля 2020

Упражнение 1-21 C Язык программирования Керниган

Пожалуйста, объясните последнюю строку.

#include <stdio.h>

#define TABINC 8

/* replace strings of blanks with tabs and blanks */
int main()
{
    int c, nb, nt, pos;

    nb = 0;   /* number of blanks necessary */
    nt = 0;   /* number of tabs necessary   */
    for (pos = 1; (c = getchar()) != EOF; ++pos)
       if (c == ' ') {
           if (pos % TABINC != 0)
                 ++nb;                /* increment # of blanks */
           else {
                 nb = 0;              /* reset # of blanks */
                 ++nt;                /* one more tab      */
            }
          } else {
                 for ( ; nt > 0 ; --nt)
                        putchar('\t')        /* output tab(s)   */
                 if (c == '\t')              /* forget the blank(s) */
                       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;
          }
}**

У меня трудности с интерпретацией финальной строки. , , Не могли бы вы объяснить, как расшифровать арифметику c?

Что это значит? иначе если (c == '\ t') pos = pos + (TABIN C - (pos-1)% TABIN C) - 1;

1 Ответ

0 голосов
/ 15 апреля 2020
else if (c == '\t')

проверяет, является ли текущий символ символом Tab .

pos = pos + (TABINC - (pos-1) % TABINC) - 1;

вычисляет следующий кратный столбец TABINC из текущего столбца pos.

(pos-1) % TABINC - количество символов между последней остановкой табуляции и текущей позицией; например, если pos == 10, pos-1 равно 9, а 9 % 8 равно 1. Следующая точка табуляции - 16, то есть 10 + (8 - 1) - 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...