Тема: Керніган і Рітчі, вправа 5.11
Доброго дня форумчанам!
Умова задачі наступна:
Вдоскональте програми entab і detab таким чином щоб через аргументи командного рядку можна було вказати список стопів табуляції.
Вправу я скоріш за все зможу виконати сам, але перш за все потрібно зрозуміти умову, в цьому і полягає проблема.
По-перше, я уже створив декілька тем по вправам entab і detab, найзмістовнішою із яких виявилась ця.
Дійсно, прочитавши статтю стає зрозуміло, що табуляція - це перш за все символ. Він надає терміналу інструкцію перемістити каретку на певну кількість знаків. Місце, в якому опиниться каретка після опрацювання терміналом інструкції, називається стоп табуляції.
Тепер приводжу код програми entab
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
  unsigned long tab=8, pos=1;
  int c;
  if (argc>1)
    tab = strtoul(argv[1],NULL,10);
  if (tab==0)
    tab=8;
  while ((c=getchar()) != EOF) {
    switch (c) {
      case '\t': c=' ';
                 while (pos++ < tab){
                  putchar(' ');
                }
      case '\n': pos=0;
    }
    putchar(c);
    if (pos==tab) pos=1;
    else pos++;
  }
  return (ferror(stdin) || ferror(stdout))?EXIT_FAILURE:EXIT_SUCCESS;
}Автором цього коду є Flash Gordon.
А тепер повернімося до умови задачі. Все було б ясно якби потрібно було просто призначити змінній tab значення відповідне до аргументу командного рядку, проте в умові сказано задати список стопів табуляції, як це зрозуміти?