2.53M
AI

1_7_Структуры_Аргументы кмд_Файлы

1.

Алгоритмизация и программирование
Структуры

2.

Структуры
❖ Объединение данных разных (или одинаковых) типов под одним именем
❖ name, age, height – атрибуты структуры
❖ struct Person – объявление структуры или создание объекта

3.

Инициализация структур

4.

Указатели и структуры
❖ Указатель на структуру объявляется так же, как указатель на любой другой тип
❖ Оператор -> — это сокращённая форма записи (*ptr).атрибут

5.

Методы и функции
❖ Метод – функция, связанная с конкретным объектом (закрытые и открытые)
❖ Функция – общее назначение, не обязательно относится к какому-то объекту
❖ *Сеттеры (Setters) – методы, устанавливающие значение атрибута
❖ *Геттеры (Getters) – методы, получающие значение атрибута

6.

Память структур
❖ Паддинг – дополнительное «выравнивание» выделенной памяти по адресам, кратным их размеру
3 chars name Cat: 8
4 chars name Cat: 8
5 chars name Cat: 12

7.

Вложенные структуры
Структура, которая помимо обычных типов данных, содержит другие структуры
Animal – базовое свойство объекта. Родитель
Cat, Dog – дополнительные свойства объекта. Наследники

8.

Алгоритмизация и программирование
Аргументы для программ

9.

argc
Первый целочисленный аргумент главной функции и отвечает за общее количество принятых параметров
>arguments.exe
Arguments count: 1
>arguments.exe 2
Arguments count: 2
>arguments.exe 2 3
Arguments count: 3
>arguments.exe 2 3 4
Arguments count: 4

10.

argv
Второй аргумент главной функции и содержит массив значений принятых аргументов. Тип: char*
>arguments.exe 2 3 4
{"argument_0": "arguments.exe"}
{"argument_1": "2"}
{"argument_2": "3"}
{"argument_3": "4"}
❖ Все аргументы передаются строками (char*). Если нужно число, то его нужно преобразовать
❖ Индексация начинается с 0 – имя запущенного приложения
❖ Если обратиться к несуществующему аргументу – гарантированный вылет за пределы памяти

11.

Парсим аргументы
Парсинг — «разобрать текст на кусочки и понять, что к чему»
>calc.exe
Usage: calc.exe <num> <+|-|/|*> <num>
>calc.exe 2 + 3
2+3=5
>calc.exe 2 - 3
2 - 3 = -1
>calc.exe 6 / 3
6/3=2
>calc.exe 2 * 3 // просто меняем в коде * на x
Usage: calc.exe <num> <+|-|/|*> <num>

12.

Работа с файлами
Файлы – точно такой же поток вывода, как stdout или stderr. Да даже эти потоки на самом то деле являются FILE*
Режим
Чтение
Запись
Обнуление при
открытии
“r” / “rb”
✓
✗
✗
“w” / “wb”
✗
✓
✓
“a” / “ab”
✗
✓
✗
“r+” / “rb+”
✓
✓
✓
“w+” / “wb+”
✓
✓
✓
“a+” / “ab+”
✓
✓
✗

13.

Чтение из файла
fgets – читает строку из файла. Требуется указывать максимальный размер строки
fgetc – читает файл посимвольно
fread – чтение «блоками» или «кусками». Если вернулось меньше, чем просили, то, скорее всего, конец файла

14.

Запись в файл
fprintf – форматированный вывод в FILE* (в том числе в stdout, stderr)
fputs / fputc – вывод в FILE* строки или конкретного символа
fwrite – сколько конкретно записать в FILE*. Требует проверки корректной записи данных на диск
// cats.txt
Tom,3,fish
Acya,4,chicken
Din,5,mouse
// cats_copy.txt
Tom,3,fish
Acya,4,chicken
Din,5,mouse

15.

MiniCopy_v1
1) Открыли файл из argv[1] на бинарное чтение
2) Открыли файл из argv[2] на бинарную запись
3) Побайтово записали файл
>minicopy.exe cat-image.jpg cat-image.jpg
[ERROR] Unable to copy file onto itself: cat-image.jpg
>minicopy.exe cat-image.jpg cat-img_copy.jpg

16.

MiniCopy_v2
1) Открыли файл из argv[1] на бинарное чтение
2) Открыли файл из argv[2] на бинарную запись
3) Поблочно записали файл
>minicopy.exe cat-image.jpg cat-image.jpg
[ERROR] Unable to copy file onto itself: cat-image.jpg
>minicopy.exe cat-image.jpg cat-img_copy.jpg
English     Русский Rules