Тема: Керніган і Рітчі, вправа 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 значення відповідне до аргументу командного рядку, проте в умові сказано задати список стопів табуляції, як це зрозуміти?