|
|
|
@ -370,21 +370,53 @@ for (double x : numbers) {
|
|
|
|
|
Дальнейшая работа ведется в консоли из каталога с файлом `*.exe`,
|
|
|
|
|
в CodeBlocks это может быть `bin\Debug`.
|
|
|
|
|
|
|
|
|
|
#### Командная строка Windows
|
|
|
|
|
|
|
|
|
|
Командная строка (терминал) запускается через *Win+R*, `cmd` или путем ввода
|
|
|
|
|
`cmd` в строку адреса в «Проводнике» и нажатия *Enter.*
|
|
|
|
|
|
|
|
|
|
Текст `C:\>` слева от курсора называется *приглашением (prompt).*
|
|
|
|
|
Приглашение показывает текущий каталог — корень диска C.
|
|
|
|
|
Перейти в другой каталог можно командой `cd`, например, `cd lab01`.
|
|
|
|
|
Если нужно перейти на другой диск, добавляется *ключ (опция)* `/d`,
|
|
|
|
|
например: `cd /d L:\A-01-18\username`.
|
|
|
|
|
Чтобы не вводить путь вручную,
|
|
|
|
|
можно нажимать *Tab* после ввода первых символов имени каталога,
|
|
|
|
|
и Windows дополнит путь.
|
|
|
|
|
Если нужно повторить одну из предыдущих команд,
|
|
|
|
|
стрелки вверх и вниз проматывают историю.
|
|
|
|
|
|
|
|
|
|
Если нужно отредактировать команду,
|
|
|
|
|
стрелками можно перемещать курсор влево-вправо.
|
|
|
|
|
Скопировать и вставить текст в Windows 10 и выше можно `Ctrl+C`/`Ctrl+V`,
|
|
|
|
|
а в более старых системах нужно вызвать контекстное меню заголовка окна
|
|
|
|
|
и выбрать там *Изменить... → Копировать.*
|
|
|
|
|
|
|
|
|
|
При затруднениях в работе с консолью можно воспользоваться [руководством][cmd].
|
|
|
|
|
|
|
|
|
|
[cmd]: http://cmd.readthedocs.io/cmd.html
|
|
|
|
|
|
|
|
|
|
#### Командная строка Windows
|
|
|
|
|
#### Командная строка Unix (Linux, OS X)
|
|
|
|
|
|
|
|
|
|
Командная строка (терминал) запускается через *Win+R*, `cmd` или путем ввода
|
|
|
|
|
`cmd` в строку адреса в «Проводнике» и нажатия *Enter.* Текст `C:\>` слева
|
|
|
|
|
от курсора называется *приглашением (prompt).* Приглашение показывает
|
|
|
|
|
текущий каталог — корень диска C. Перейти в другой каталог можно
|
|
|
|
|
командой `cd`, например, `cd lab01`. Если нужно перейти на другой диск,
|
|
|
|
|
добавляется *ключ (опция)* `/d`, например: `cd /d L:\A-01-18\username`.
|
|
|
|
|
Чтобы не вводить путь вручную, можно нажимать *Tab* после ввода первых
|
|
|
|
|
символов имени каталога, и Windows дополнит путь. Если нужно повторить
|
|
|
|
|
одну из предыдущих команд, стрелки вверх и вниз проматывают историю.
|
|
|
|
|
Терминал обычно запускается через лаунчер поиском по слову `Terminal`.
|
|
|
|
|
Конкретная программа зависит от операционной системы и дистрибутива Linux.
|
|
|
|
|
Подойдет любая.
|
|
|
|
|
|
|
|
|
|
Текст вида `<имя пользователя>@<имя машины>:~$` слева от курсора
|
|
|
|
|
называется *приглашением (prompt).*
|
|
|
|
|
Приглашение показывает текущий каталог — домашнюю директорию `~`,
|
|
|
|
|
что является сокращением для `/home/<имя пользователя>`.
|
|
|
|
|
Перейти в другой каталог можно командой `cd`, например, `cd lab01`.
|
|
|
|
|
Чтобы не вводить путь вручную,
|
|
|
|
|
можно нажимать *Tab* после ввода первых символов имени каталога,
|
|
|
|
|
и Windows дополнит путь.
|
|
|
|
|
Если нужно повторить одну из предыдущих команд,
|
|
|
|
|
стрелки вверх и вниз проматывают историю.
|
|
|
|
|
|
|
|
|
|
Если нужно отредактировать команду,
|
|
|
|
|
стрелками можно перемещать курсор влево-вправо.
|
|
|
|
|
Скопировать и вставить текст можно сочетаниями `Ctrl+Shitf+C`/`Ctrl+Shift+V`
|
|
|
|
|
или `Ctrl+Ins`/`Shift+Ins` (для OS X вместо `Ctrl` используется `Cmd`).
|
|
|
|
|
|
|
|
|
|
#### Запуск программ без CodeBlocks
|
|
|
|
|
|
|
|
|
@ -394,6 +426,12 @@ for (double x : numbers) {
|
|
|
|
|
C:\lab01\bin\Debug> lab01
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
В Unix у исполняемых файлов нет расширения `*.exe` и запуск делается иначе:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
user@host:~/lab01/bin/Debug$ ./lab01
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Однако это может привести к сообщению об ошибке
|
|
|
|
|
(имя библиотеки может быть иным):
|
|
|
|
|
|
|
|
|
@ -427,15 +465,21 @@ target_link_options(xxx PRIVATE -static -static-libstdc++)
|
|
|
|
|
вывода (standard output, stdout).* По умолчанию стандартный ввод связан
|
|
|
|
|
с клавиатурой, а вывод — с терминалом (окном консоли в Windows). Однако
|
|
|
|
|
можно при запуске программы указать, что стандартным вводом для нее будет
|
|
|
|
|
не клавиатура, а файл *(перенаправление ввода, input redirection):*
|
|
|
|
|
не клавиатура, а файл *(перенаправление ввода, input redirection).*
|
|
|
|
|
|
|
|
|
|
``` shell
|
|
|
|
|
C:\lab01> lab01.exe < 01-example.input.txt
|
|
|
|
|
Windows:
|
|
|
|
|
```cmd
|
|
|
|
|
C:\lab01\bin\Debug> lab01.exe < 01-example.input.txt
|
|
|
|
|
Enter number count: Enter numbers: Enter bin count: 2|**
|
|
|
|
|
5|*****
|
|
|
|
|
3|***
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Unix:
|
|
|
|
|
```sh
|
|
|
|
|
user@host:~/lb01/bin/Debug$ ./lab01 < 01-example.input.txt
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Внимание.**
|
|
|
|
|
Здесь и далее примеры работы с командной строкой включают приглашение
|
|
|
|
|
`C:\lab01>`, команду и ее вывод. Приглашение вводить не нужно, это просто
|
|
|
|
@ -451,10 +495,16 @@ Enter number count: Enter numbers: Enter bin count: 2|**
|
|
|
|
|
Видно, что гистограмма строится правильно, но картину портят приглашения
|
|
|
|
|
ввода (`Enter number count` и прочие).
|
|
|
|
|
|
|
|
|
|
Аналогично можно направить стандартный вывод в файл:
|
|
|
|
|
Аналогично можно направить стандартный вывод в файл.
|
|
|
|
|
|
|
|
|
|
``` shell
|
|
|
|
|
C:\lab01> lab01.exe < 01-example.input.txt > 01-example.actual.txt
|
|
|
|
|
Windows:
|
|
|
|
|
```cmd
|
|
|
|
|
C:\lab01\bin\Debug> lab01.exe < 01-example.input.txt > 01-example.actual.txt
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Unix:
|
|
|
|
|
```sh
|
|
|
|
|
user@host:~/lab01/bin/Debug$ ./lab01 < 01-example.input.txt > 01-example.actual.txt
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Вывода на терминал нет — он весь в `01-example.actual.txt`, и если его
|
|
|
|
@ -482,28 +532,37 @@ cerr << "Enter number count: ";
|
|
|
|
|
связан с терминалом. Если же перенаправить вывод в файл, записанное в `cerr`
|
|
|
|
|
появится в терминале, но не в файле `01-example.actual.txt`:
|
|
|
|
|
|
|
|
|
|
``` shell
|
|
|
|
|
C:\lab01> lab01.exe < 01-example.input.txt > 01-example.actual.txt
|
|
|
|
|
``` cmd
|
|
|
|
|
C:\lab01\bin\Debug> lab01.exe < 01-example.input.txt > 01-example.actual.txt
|
|
|
|
|
Enter number count: Enter numbers: Enter bin count:
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Чтобы убрать декоративный вывод при автоматических тестах, можно направить
|
|
|
|
|
его в специальное устройство `NUL`, которое поглощает любой вывод в него:
|
|
|
|
|
его в специальное устройство `NUL`, которое поглощает любой вывод в него.
|
|
|
|
|
|
|
|
|
|
``` shell
|
|
|
|
|
C:\lab01> lab01.exe < 01-example.input.txt > 01-example.actual.txt 2>NUL
|
|
|
|
|
**Внимание.**
|
|
|
|
|
Здесь между Windows и Unix есть отличие: `2>NUL` vs `2>/dev/null`.
|
|
|
|
|
|
|
|
|
|
Windows:
|
|
|
|
|
```cmd
|
|
|
|
|
C:\lab01\bin\Debug> lab01.exe < 01-example.input.txt > 01-example.actual.txt 2>NUL
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Unix:
|
|
|
|
|
```cmd
|
|
|
|
|
user@host:~/lab01/bin/Debug> ./lab01 <01-example.input.txt >01-example.actual.txt 2>/dev/null
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Вывода в терминал при этом нет никакого, хотя программа успешно работает.
|
|
|
|
|
|
|
|
|
|
#### Сравнение файлов
|
|
|
|
|
#### Сравнение файлов (Windows)
|
|
|
|
|
|
|
|
|
|
Программа `fc` (file compare) позволяет построчно сравнить файл вывода
|
|
|
|
|
программы `01-example.actual.txt` с файлом `01-example.expected.txt`,
|
|
|
|
|
содержащим эталонный вывод:
|
|
|
|
|
|
|
|
|
|
``` shell
|
|
|
|
|
C:\lab01> fc 01-example.actual.txt 01-example.expected.txt
|
|
|
|
|
``` cmd
|
|
|
|
|
C:\lab01\bin\Debug> fc 01-example.actual.txt 01-example.expected.txt
|
|
|
|
|
Сравнение файлов 01-example.actual.txt и 01-EXAMPLE.EXPECTED.TXT
|
|
|
|
|
FC: различия не найдены
|
|
|
|
|
```
|
|
|
|
@ -513,8 +572,8 @@ FC: различия не найдены
|
|
|
|
|
|
|
|
|
|
[fc]: http://ab57.ru/cmdlist/fc.html
|
|
|
|
|
|
|
|
|
|
``` shell
|
|
|
|
|
C:\lab01> fc /N 01-example.actual.txt 02-alignment.expected.txt
|
|
|
|
|
``` cmd
|
|
|
|
|
C:\lab01\bin\Debug> fc /N 01-example.actual.txt 02-alignment.expected.txt
|
|
|
|
|
Сравнение файлов 01-example.actual.txt и 02-ALIGNMENT.EXPECTED.TXT
|
|
|
|
|
***** 01-example.actual.txt
|
|
|
|
|
1: 2|**
|
|
|
|
@ -527,6 +586,33 @@ C:\lab01> fc /N 01-example.actual.txt 02-alignment.expected.txt
|
|
|
|
|
*****
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### Сравнение файлов (Unix)
|
|
|
|
|
|
|
|
|
|
Программа `diff` (difference) позволяет построчно сравнить файл вывода
|
|
|
|
|
программы `01-example.actual.txt` с файлом `01-example.expected.txt`,
|
|
|
|
|
содержащим эталонный вывод:
|
|
|
|
|
|
|
|
|
|
``` sh
|
|
|
|
|
user@host:~/lab01/bin/Debug$ diff -u 01-example.actual.txt 01-example.expected.txt
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Если отличий нет, `diff` не печатает ничего, как в примере выше.
|
|
|
|
|
|
|
|
|
|
Если бы были отличия, `diff` могла бы показать отличающиеся строки и их номера:
|
|
|
|
|
|
|
|
|
|
``` sh
|
|
|
|
|
user@host:~/lab01/bin/Debug$ diff -u 01-example.actual.txt 02-alignment.expected.txt
|
|
|
|
|
--- 01-example.actual.txt 2023-02-06 23:52:25.513825363 +0300
|
|
|
|
|
+++ 02-alignment.expected.txt 2023-02-06 23:52:25.514825395 +0300
|
|
|
|
|
@@ -1,3 +1,3 @@
|
|
|
|
|
- 2|**
|
|
|
|
|
- 5|*****
|
|
|
|
|
- 3|***
|
|
|
|
|
+ 9|*********
|
|
|
|
|
+ 33|*********************************
|
|
|
|
|
+100|****************************************************************************************************
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### BAT-файлы
|
|
|
|
|
|
|
|
|
|
Чтобы не вводить каждый раз команды вручную, их можно записать в файл
|
|
|
|
|