Проблема реализации cat utility согласно правилам структурного программирования UNIX C

Необходимо вывести в stdout работу функции my_cat, чтобы та работала идентично стандартной утилите cat linux.


Как избежать использования операторов continue and break, чтобы не возникали конфликты в работе нескольких опций командной строки. Таких как -sn и т.п.

void print_with_opt(FILE* fp, my_opt* opt) {
  int ch, skip = 0, line = 0, prev_ch;
  for (prev_ch = '\n'; (ch = fgetc(fp)) != EOF; prev_ch = ch) {
    if (prev_ch == '\n') {
      if (opt->mutual & OPT_SQUEEZE) {
        if (ch == '\n') {
          if (skip)
                        continue;
                    skip = 1;
                } else
                    skip = 0;
      }
      if (((opt->mutual & OPT_NUM_ALL_LINE) && !(opt->mutual & OPT_NUM_NONBLANK)) ||
          ((opt->mutual & OPT_NUM_NONBLANK) && ch != '\n'))
        fprintf(stdout, "%6d\t", ++line);
    }

    if (ch == '\n' && (opt->mutual & OPT_END_OF_LINE)) {
      fprintf(stdout, "$\n");
    } else if (ch == '\t' && (opt->mutual & OPT_TABS)) {
      fprintf(stdout, "^I");
    } else if ((opt->mutual & OPT_NONPRINTING) && ch != '\n' && ch != '\t') {
      if (!isascii(ch) && !isprint(ch)) {
        fprintf(stdout, "M-");
                ch = toascii(ch);
            }
            if (iscntrl(ch))
        fprintf(stdout, "^%c", ch == '\177' ? '?' : ch | 0100);
            else
        putchar(ch);
    } else {
      putchar(ch);
    }
  }
}

Link on github


Ответы (0 шт):