Введение
В этом практическом занятии (лабораторной работе) вы научитесь разбирать аргументы командной строки на языке программирования C. В рамках практического занятия рассматриваются основные концепции аргументов командной строки, включая получение количества аргументов, извлечение значений аргументов, обработку недопустимых аргументов и реализацию простого инструмента командной строки. По завершении практического занятия вы будете хорошо понимать, как работать с аргументами командной строки в своих программах на языке C.
Понимание аргументов командной строки
На этом этапе вы узнаете основные концепции аргументов командной строки в программировании на языке C и как они передаются программе при ее запуске.
Что такое аргументы командной строки?
Аргументы командной строки - это параметры, которые передаются программе при ее запуске из командной строки. В языке C эти аргументы передаются функции main() с помощью двух специальных параметров: argc и argv.
- Создайте новый файл с именем
arguments_intro.cв директории~/project:
cd ~/project
touch arguments_intro.c
- Добавьте следующий код для изучения аргументов командной строки:
#include <stdio.h>
int main(int argc, char* argv[]) {
printf("Number of arguments: %d\n", argc);
for (int i = 0; i < argc; i++) {
printf("Argument %d: %s\n", i, argv[i]);
}
return 0;
}
- Скомпилируйте программу:
gcc arguments_intro.c -o arguments_intro
- Запустите программу с разным количеством аргументов:
./arguments_intro
./arguments_intro Hello
./arguments_intro Hello World
Пример вывода:
## When no arguments are provided
Number of arguments: 1
Argument 0:./arguments_intro
## With one argument
Number of arguments: 2
Argument 0:./arguments_intro
Argument 1: Hello
## With two arguments
Number of arguments: 3
Argument 0:./arguments_intro
Argument 1: Hello
Argument 2: World
Понимание argc и argv
argc(количество аргументов): Представляет общее количество аргументов, переданных программе, включая само имя программы.argv(массив аргументов): Массив строк, содержащий фактические аргументы.argv[0]всегда является именем программы.- Последующие аргументы начинаются с
argv[1].
Получение количества аргументов
На этом этапе вы узнаете, как получить и использовать количество аргументов, переданных программе на языке C, с помощью параметра argc.
Проверка количества аргументов
Понимание того, как проверить количество аргументов, является важной частью создания гибких и надежных программ командной строки. Вы научитесь проверять количество аргументов и давать соответствующую обратную связь.
- Создайте новый файл с именем
argument_count.cв директории~/project:
cd ~/project
touch argument_count.c
- Добавьте следующий код, чтобы продемонстрировать проверку количества аргументов:
#include <stdio.h>
int main(int argc, char* argv[]) {
// Check if the correct number of arguments is provided
if (argc < 2) {
printf("Error: At least one argument is required.\n");
printf("Usage: %s <argument1> [argument2]...\n", argv[0]);
return 1;
}
// Print the total number of arguments
printf("Total number of arguments: %d\n", argc);
// Check for a maximum number of arguments
if (argc > 4) {
printf("Warning: Too many arguments. Only first 3 will be processed.\n");
}
return 0;
}
- Скомпилируйте программу:
gcc argument_count.c -o argument_count
- Запустите программу с разным количеством аргументов:
## No arguments
./argument_count
## One argument
./argument_count Hello
## Multiple arguments
./argument_count Hello World Lab
## Too many arguments
./argument_count Arg1 Arg2 Arg3 Arg4 Arg5
Пример вывода:
## No arguments
Error: At least one argument is required.
Usage:./argument_count <argument1> [argument2]...
## One argument
Total number of arguments: 2
## Multiple arguments
Total number of arguments: 4
## Too many arguments
Total number of arguments: 6
Warning: Too many arguments. Only first 3 will be processed.
Основные концепции
argcпоказывает общее количество аргументов, включая имя программы.- Вы можете использовать
argcдля проверки количества аргументов. - Давайте четкие инструкции по использованию, если переданы неверные аргументы.
- Корректно обрабатывайте случаи с недостаточным или избыточным количеством аргументов.
Извлечение значений аргументов
На этом этапе вы узнаете, как извлекать и обрабатывать отдельные значения аргументов с использованием массива argv в программе на языке C.
Получение и обработка аргументов
Понимание того, как получить конкретные значения аргументов, является важным для создания интерактивных инструментов командной строки, которые могут эффективно обрабатывать пользовательский ввод.
- Создайте новый файл с именем
argument_values.cв директории~/project:
cd ~/project
touch argument_values.c
- Добавьте следующий код, чтобы продемонстрировать извлечение значений аргументов:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]) {
// Check if at least two arguments are provided
if (argc < 3) {
printf("Usage: %s <name> <age>\n", argv[0]);
return 1;
}
// Retrieve and store argument values
char* name = argv[1];
int age = atoi(argv[2]);
// Validate age
if (age <= 0) {
printf("Error: Age must be a positive number.\n");
return 1;
}
// Process and display argument values
printf("Name: %s\n", name);
printf("Age: %d\n", age);
// Demonstrate string comparison
if (strcmp(name, "LabEx") == 0) {
printf("Welcome, LabEx user!\n");
}
return 0;
}
- Скомпилируйте программу:
gcc argument_values.c -o argument_values
- Запустите программу с разными аргументами:
## Correct usage
./argument_values LabEx 25
## Incorrect usage
./argument_values
./argument_values John
./argument_values John -5
Пример вывода:
## Correct usage
Name: LabEx
Age: 25
Welcome, LabEx user!
## Incorrect usage (no arguments)
Usage:./argument_values <name> <age>
## Incorrect usage (missing age)
Usage:./argument_values <name> <age>
## Incorrect usage (invalid age)
Name: John
Error: Age must be a positive number.
Основные концепции
argv[1],argv[2]и т.д. используются для получения конкретных значений аргументов.- Функция
atoi()преобразует строковые аргументы в целые числа. - Функция
strcmp()сравнивает строки. - Всегда проверяйте и очищайте входные аргументы.
Обработка некорректных аргументов
На этом этапе вы узнаете, как реализовать надежную проверку аргументов и обработку ошибок в программе на языке C для управления различными сценариями недопустимого ввода.
Комплексная проверка аргументов
Создание надежных инструментов командной строки требует тщательной проверки аргументов, предоставляемых пользователем, чтобы предотвратить неожиданное поведение и выводить четкие сообщения об ошибках.
- Создайте новый файл с именем
argument_validation.cв директории~/project:
cd ~/project
touch argument_validation.c
- Добавьте следующий код, чтобы продемонстрировать комплексную проверку аргументов:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// Function to check if a string is a valid number
int is_numeric(const char* str) {
while (*str) {
if (!isdigit(*str)) {
return 0;
}
str++;
}
return 1;
}
int main(int argc, char* argv[]) {
// Check for correct number of arguments
if (argc!= 3) {
fprintf(stderr, "Usage: %s <username> <age>\n", argv[0]);
fprintf(stderr, "Error: Exactly 2 arguments required.\n");
return 1;
}
// Validate username
char* username = argv[1];
if (strlen(username) < 3 || strlen(username) > 20) {
fprintf(stderr, "Error: Username must be between 3 and 20 characters.\n");
return 1;
}
// Validate age
char* age_str = argv[2];
if (!is_numeric(age_str)) {
fprintf(stderr, "Error: Age must be a positive number.\n");
return 1;
}
int age = atoi(age_str);
if (age < 0 || age > 120) {
fprintf(stderr, "Error: Age must be between 0 and 120.\n");
return 1;
}
// Process valid arguments
printf("Username validated: %s\n", username);
printf("Age validated: %d\n", age);
return 0;
}
- Скомпилируйте программу:
gcc argument_validation.c -o argument_validation
- Запустите программу с различными сценариями ввода:
## Correct usage
./argument_validation JohnDoe 30
## Incorrect number of arguments
./argument_validation
./argument_validation JohnDoe
## Invalid username
./argument_validation Jo 30
./argument_validation JohnDoeWithAVeryLongUsername 30
## Invalid age
./argument_validation JohnDoe abc
./argument_validation JohnDoe -5
./argument_validation JohnDoe 150
Пример вывода:
## Correct usage
Username validated: JohnDoe
Age validated: 30
## Incorrect number of arguments
Usage:./argument_validation <username> <age>
Error: Exactly 2 arguments required.
## Invalid username
Error: Username must be between 3 and 20 characters.
## Invalid age formats
Error: Age must be a positive number.
Error: Age must be between 0 and 120.
Основные концепции
- Используйте пользовательские функции проверки для проверки формата аргументов.
- Реализуйте несколько проверок валидации.
- Используйте
stderrдля вывода сообщений об ошибках. - Предоставляйте четкую и информативную обратную связь об ошибках.
- Возвращайте ненулевые коды выхода для недопустимого ввода.
Реализация простого инструмента командной строки
На этом этапе вы создадите практический инструмент командной строки, который демонстрирует навыки, полученные вами при разборе и обработке аргументов командной строки.
Инструмент командной строки - калькулятор
Вы реализуете простой калькулятор командной строки, который выполняет базовые арифметические операции на основе аргументов, предоставленных пользователем.
- Создайте новый файл с именем
calc.cв директории~/project:
cd ~/project
touch calc.c
- Добавьте следующий код для создания калькулятора командной строки:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Function prototypes
double add(double a, double b);
double subtract(double a, double b);
double multiply(double a, double b);
double divide(double a, double b);
int main(int argc, char* argv[]) {
// Check for correct number of arguments
if (argc!= 4) {
fprintf(stderr, "Usage: %s <operation> <num1> <num2>\n", argv[0]);
fprintf(stderr, "Operations: add, sub, mul, div\n");
return 1;
}
// Parse operation
char* operation = argv[1];
// Convert arguments to numbers
double num1 = atof(argv[2]);
double num2 = atof(argv[3]);
// Perform calculation based on operation
double result = 0;
if (strcmp(operation, "add") == 0) {
result = add(num1, num2);
printf("%.2f + %.2f = %.2f\n", num1, num2, result);
} else if (strcmp(operation, "sub") == 0) {
result = subtract(num1, num2);
printf("%.2f - %.2f = %.2f\n", num1, num2, result);
} else if (strcmp(operation, "mul") == 0) {
result = multiply(num1, num2);
printf("%.2f * %.2f = %.2f\n", num1, num2, result);
} else if (strcmp(operation, "div") == 0) {
// Check for division by zero
if (num2 == 0) {
fprintf(stderr, "Error: Division by zero\n");
return 1;
}
result = divide(num1, num2);
printf("%.2f / %.2f = %.2f\n", num1, num2, result);
} else {
fprintf(stderr, "Error: Invalid operation\n");
fprintf(stderr, "Supported operations: add, sub, mul, div\n");
return 1;
}
return 0;
}
// Arithmetic operation functions
double add(double a, double b) {
return a + b;
}
double subtract(double a, double b) {
return a - b;
}
double multiply(double a, double b) {
return a * b;
}
double divide(double a, double b) {
return a / b;
}
- Скомпилируйте программу:
gcc calc.c -o calc
- Запустите калькулятор с разными операциями:
## Addition
./calc add 5 3
## Subtraction
./calc sub 10 4
## Multiplication
./calc mul 6 7
## Division
./calc div 15 3
## Error cases
./calc div 10 0
./calc pow 5 2
Пример вывода:
## Addition
5.00 + 3.00 = 8.00
## Subtraction
10.00 - 4.00 = 6.00
## Multiplication
6.00 * 7.00 = 42.00
## Division
15.00 / 3.00 = 5.00
## Division by zero
Error: Division by zero
## Invalid operation
Error: Invalid operation
Supported operations: add, sub, mul, div
Основные концепции
- Соединяйте разбор аргументов с функциональной логикой.
- Обрабатывайте различные сценарии операций.
- Предоставляйте четкие сообщения об ошибках.
- Используйте отдельные функции для разных операций.
- Проверяйте входные данные и обрабатывайте крайние случаи.
Резюме
В этом практическом занятии (лабораторной работе) вы узнаете, как разбирать аргументы командной строки в программировании на языке C. Сначала вы познакомитесь с основными концепциями аргументов командной строки, включая параметры argc и argv в функции main(). Затем вы научитесь получать количество аргументов и извлекать их значения. Кроме того, вы изучите обработку недопустимых аргументов и реализуете простой инструмент командной строки. К концу этого практического занятия у вас будут знания и навыки для эффективного использования аргументов командной строки в своих программах на языке C.



