Практика 5
Материал из SEWiki
Задание выполняется на базе предыдущего
Написать программу, которая работает с командной строкой (ввод всегда без ошибок)
Входные параметры
./main {loadtxt | loadbin} infile {savetxt | savebin} outfile ./main {loadtxt | loadbin} infile print “fmt” ./main {loadtxt | loadbin} infile count
- loadtxt загрузить из текстового файла
- loadbin загрузить из двоичного файла
- savetxt записать в текстовый файл
- savebin записать в двоичный файл
- print “fmt” вывести список на экран в формате fmt (пример fmt: “(%d %d)”, “[%#x %#x]\n”)
- count вывести размер списка
Замечания
Файлы всегда правильного формата
Текстовый файл: каждый элемент списка на новой строке; числа x и y разделены пробелом
Бонус
Бинарный файл: каждое число занимает не больше 3 байт
Hint: в структуре тип int x; при чтение/записи надо работать с битами с помощью &, |, <<, >>
Требование по реализации count и print
Использовать указатель на функцию. Для этого реализуем вспомогательную функцию:
void applyFunctionToEachNode( intrusive_list_t* l, void (*f)(...), ...)
Которая проходит по всему листу и вызывает f для каждого узла. Соответственно для печати всего листа:
applyFunctionToEachNode(list, &functionThatPrintsSingleNode)
NOTE: Глобальные переменные использовать запрещено.