Как я могу объединить эффекты параметров, передаваемых в командной строке, на строки? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть функция, которая получает некоторые флаги и на основе этих флагов форматирует строку для вывода в качестве вывода.Проблема в том, что эти флаги не зависят друг от друга.Другими словами, выходные данные могут быть отформатированы столько раз, сколько существует комбинаций этих флагов.

Есть 3 флага: bflag, nflag и sflag.Если bflag равен 1, nflag переопределяется.Но мы можем иметь b и s одновременно (или n и s), и оба манипулировать строкой вывода по-своему.Как я могу справиться с этим, не вкладывая все возможные предложения if (единственный способ, которым я могу думать)?

Вот функция, которая получает неформатированную строку и флаги:

void outputLine(int *index, char buffer[], int bflag, int nflag){ //processes the options passed in the command line to create the output
  if (nflag){
    indexedLineout(index, buffer);
  }
  else if (bflag){
    bprint(index, buffer);
  }
  else{//no options
    printf("%s", buffer);
  }
}

А вот indexedLineout ():

void indexedLineout(int *index, char buffer[]){//adds an index to the beginning of the line
  printf ("%*d\t%s", 6, *index, buffer);
  (*index)++;//increment the index
}

Я не думаю, что это актуальночтобы показать bprint (), поскольку он имеет очень смешанное поведение с indexedLineOut ().

Если я хочу добавить флаг s, о котором я упоминал выше, это в основном ничего не печатает, если предыдущий вывод был пустой строкой,и убедитесь, что он также работает в сочетании с другими флагами, другими словами, убедитесь, что он может печатать пронумерованные строки, но не соседние пустые, как я могу этого добиться?

1 Ответ

1 голос
/ 09 апреля 2019

Там 3 флага: bflag, nflag и sflag. Если bflag равен 1, nflag равен overidden. Но мы можем иметь b и s одновременно (или n и s), и оба манипулируют выходной линией по-своему. Как я могу справиться с этим без вложения всех возможностей в операторах if (единственный способ можно придумать)?

У вас есть две отдельные функции форматирования, управляемые тремя опциями, в частности, которые должны быть относительно чистыми для обработки. Вы должны иметь возможность просто перебирать строки и для каждой из них:

  1. Сжать пустые строки, если необходимо (флажки) . Если строка пуста, предыдущая также пуста, и действует флаг s, пропустите эту строку. В противном случае,
  2. При необходимости выведите номер строки (флаги n, b) .
    • , если флаг n действует, а b - нет, выведите номер строки, иначе
    • , если действует флаг b и строка не пуста, затем выведите номер строки.
  3. Распечатать саму строку .

Не думаю, что я бы даже разделил это на отдельные функции, но если вы это сделаете, я бы порекомендовал выбрать функции, которые точно соответствуют этой схеме.

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