Introdução
Neste laboratório, você aprenderá como analisar argumentos de linha de comando em programação C. O laboratório cobre os conceitos fundamentais de argumentos de linha de comando, incluindo o acesso ao número de argumentos, a recuperação de valores de argumentos, o tratamento de argumentos inválidos e a implementação de uma ferramenta simples de linha de comando. Ao final do laboratório, você terá uma sólida compreensão de como trabalhar com argumentos de linha de comando em seus programas C.
Entender os Argumentos de Linha de Comando
Nesta etapa, você aprenderá os conceitos fundamentais de argumentos de linha de comando em programação C e como eles são passados para um programa quando ele é executado.
O que são Argumentos de Linha de Comando?
Argumentos de linha de comando são parâmetros que são passados para um programa quando ele é iniciado a partir da linha de comando. Em C, esses argumentos são recebidos pela função main() através de dois parâmetros especiais: argc e argv.
- Crie um novo arquivo chamado
arguments_intro.cno diretório~/project:
cd ~/project
touch arguments_intro.c
- Adicione o seguinte código para explorar os argumentos de linha de comando:
#include <stdio.h>
int main(int argc, char* argv[]) {
printf("Número de argumentos: %d\n", argc);
for (int i = 0; i < argc; i++) {
printf("Argumento %d: %s\n", i, argv[i]);
}
return 0;
}
- Compile o programa:
gcc arguments_intro.c -o arguments_intro
- Execute o programa com diferentes números de argumentos:
./arguments_intro
./arguments_intro Hello
./arguments_intro Hello World
Exemplo de saída:
## Quando nenhum argumento é fornecido
Número de argumentos: 1
Argumento 0: ./arguments_intro
## Com um argumento
Número de argumentos: 2
Argumento 0: ./arguments_intro
Argumento 1: Hello
## Com dois argumentos
Número de argumentos: 3
Argumento 0: ./arguments_intro
Argumento 1: Hello
Argumento 2: World
Entendendo argc e argv
argc(contagem de argumentos - argument count): Representa o número total de argumentos passados para o programa, incluindo o nome do próprio programa.argv(vetor de argumentos - argument vector): Um array de strings contendo os argumentos reais.argv[0]é sempre o nome do programa.- Os argumentos subsequentes começam a partir de
argv[1].
Acessar o Número de Argumentos
Nesta etapa, você aprenderá como acessar e utilizar o número de argumentos passados para um programa C usando o parâmetro argc.
Verificando o Número de Argumentos
Entender como verificar o número de argumentos é crucial para criar programas de linha de comando flexíveis e robustos. Você aprenderá como validar o número de argumentos e fornecer feedback apropriado.
- Crie um novo arquivo chamado
argument_count.cno diretório~/project:
cd ~/project
touch argument_count.c
- Adicione o seguinte código para demonstrar a verificação da contagem de argumentos:
#include <stdio.h>
int main(int argc, char* argv[]) {
// Verifique se o número correto de argumentos foi fornecido
if (argc < 2) {
printf("Erro: Pelo menos um argumento é necessário.\n");
printf("Uso: %s <argumento1> [argumento2] ...\n", argv[0]);
return 1;
}
// Imprima o número total de argumentos
printf("Número total de argumentos: %d\n", argc);
// Verifique um número máximo de argumentos
if (argc > 4) {
printf("Aviso: Muitos argumentos. Apenas os 3 primeiros serão processados.\n");
}
return 0;
}
- Compile o programa:
gcc argument_count.c -o argument_count
- Execute o programa com diferentes números de argumentos:
## Sem argumentos
./argument_count
## Um argumento
./argument_count Hello
## Múltiplos argumentos
./argument_count Hello World Lab
## Muitos argumentos
./argument_count Arg1 Arg2 Arg3 Arg4 Arg5
Exemplo de saída:
## Sem argumentos
Erro: Pelo menos um argumento é necessário.
Uso: ./argument_count <argumento1> [argumento2] ...
## Um argumento
Número total de argumentos: 2
## Múltiplos argumentos
Número total de argumentos: 4
## Muitos argumentos
Número total de argumentos: 6
Aviso: Muitos argumentos. Apenas os 3 primeiros serão processados.
Conceitos Chave
argcinforma o número total de argumentos, incluindo o nome do programa.- Você pode usar
argcpara validar o número de argumentos. - Forneça instruções de uso claras quando argumentos incorretos forem fornecidos.
- Lide com casos com poucos ou muitos argumentos de forma adequada.
Recuperar os Valores dos Argumentos
Nesta etapa, você aprenderá como recuperar e processar valores de argumentos individuais usando o array argv em um programa C.
Acessando e Processando Argumentos
Entender como acessar valores de argumentos específicos é essencial para criar ferramentas de linha de comando interativas que podem lidar com as entradas do usuário de forma eficaz.
- Crie um novo arquivo chamado
argument_values.cno diretório~/project:
cd ~/project
touch argument_values.c
- Adicione o seguinte código para demonstrar a recuperação de valores de argumentos:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]) {
// Verifique se pelo menos dois argumentos foram fornecidos
if (argc < 3) {
printf("Uso: %s <nome> <idade>\n", argv[0]);
return 1;
}
// Recupere e armazene os valores dos argumentos
char* name = argv[1];
int age = atoi(argv[2]);
// Valide a idade
if (age <= 0) {
printf("Erro: A idade deve ser um número positivo.\n");
return 1;
}
// Processe e exiba os valores dos argumentos
printf("Nome: %s\n", name);
printf("Idade: %d\n", age);
// Demonstre a comparação de strings
if (strcmp(name, "LabEx") == 0) {
printf("Bem-vindo, usuário LabEx!\n");
}
return 0;
}
- Compile o programa:
gcc argument_values.c -o argument_values
- Execute o programa com diferentes argumentos:
## Uso correto
./argument_values LabEx 25
## Uso incorreto
./argument_values
./argument_values John
./argument_values John -5
Exemplo de saída:
## Uso correto
Nome: LabEx
Idade: 25
Bem-vindo, usuário LabEx!
## Uso incorreto (sem argumentos)
Uso: ./argument_values <nome> <idade>
## Uso incorreto (idade ausente)
Uso: ./argument_values <nome> <idade>
## Uso incorreto (idade inválida)
Nome: John
Erro: A idade deve ser um número positivo.
Conceitos Chave
argv[1],argv[2], etc., acessam valores de argumentos específicos.atoi()converte argumentos de string em inteiros.strcmp()compara strings.- Sempre valide e sanitize os argumentos de entrada.
Lidar com Argumentos Inválidos
Nesta etapa, você aprenderá como implementar uma validação de argumentos robusta e tratamento de erros em um programa C para gerenciar vários tipos de cenários de entrada inválida.
Validação Abrangente de Argumentos
Criar ferramentas de linha de comando confiáveis requer uma validação cuidadosa dos argumentos fornecidos pelo usuário para evitar comportamentos inesperados e fornecer mensagens de erro claras.
- Crie um novo arquivo chamado
argument_validation.cno diretório~/project:
cd ~/project
touch argument_validation.c
- Adicione o seguinte código para demonstrar a validação abrangente de argumentos:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// Função para verificar se uma string é um número válido
int is_numeric(const char* str) {
while (*str) {
if (!isdigit(*str)) {
return 0;
}
str++;
}
return 1;
}
int main(int argc, char* argv[]) {
// Verifique o número correto de argumentos
if (argc != 3) {
fprintf(stderr, "Uso: %s <nome_de_usuário> <idade>\n", argv[0]);
fprintf(stderr, "Erro: Exatamente 2 argumentos são necessários.\n");
return 1;
}
// Valide o nome de usuário
char* username = argv[1];
if (strlen(username) < 3 || strlen(username) > 20) {
fprintf(stderr, "Erro: O nome de usuário deve ter entre 3 e 20 caracteres.\n");
return 1;
}
// Valide a idade
char* age_str = argv[2];
if (!is_numeric(age_str)) {
fprintf(stderr, "Erro: A idade deve ser um número positivo.\n");
return 1;
}
int age = atoi(age_str);
if (age < 0 || age > 120) {
fprintf(stderr, "Erro: A idade deve estar entre 0 e 120.\n");
return 1;
}
// Processe argumentos válidos
printf("Nome de usuário validado: %s\n", username);
printf("Idade validada: %d\n", age);
return 0;
}
- Compile o programa:
gcc argument_validation.c -o argument_validation
- Execute o programa com vários cenários de entrada:
## Uso correto
./argument_validation JohnDoe 30
## Número incorreto de argumentos
./argument_validation
./argument_validation JohnDoe
## Nome de usuário inválido
./argument_validation Jo 30
./argument_validation JohnDoeWithAVeryLongUsername 30
## Idade inválida
./argument_validation JohnDoe abc
./argument_validation JohnDoe -5
./argument_validation JohnDoe 150
Exemplo de saída:
## Uso correto
Nome de usuário validado: JohnDoe
Idade validada: 30
## Número incorreto de argumentos
Uso: ./argument_validation <nome_de_usuário> <idade>
Erro: Exatamente 2 argumentos são necessários.
## Nome de usuário inválido
Erro: O nome de usuário deve ter entre 3 e 20 caracteres.
## Formatos de idade inválidos
Erro: A idade deve ser um número positivo.
Erro: A idade deve estar entre 0 e 120.
Conceitos Chave
- Use funções de validação personalizadas para verificar os formatos dos argumentos
- Implemente múltiplas verificações de validação
- Use
stderrpara mensagens de erro - Forneça feedback de erro claro e informativo
- Retorne códigos de saída diferentes de zero para entradas inválidas
Implementar uma Ferramenta de Linha de Comando Simples
Nesta etapa, você criará uma ferramenta prática de linha de comando que demonstra as habilidades que você aprendeu sobre análise e manipulação de argumentos de linha de comando.
Ferramenta de Linha de Comando Calculadora
Você implementará uma calculadora simples de linha de comando que realiza operações aritméticas básicas com base nos argumentos fornecidos pelo usuário.
- Crie um novo arquivo chamado
calc.cno diretório~/project:
cd ~/project
touch calc.c
- Adicione o seguinte código para criar uma calculadora de linha de comando:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Protótipos de função
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[]) {
// Verifique o número correto de argumentos
if (argc != 4) {
fprintf(stderr, "Uso: %s <operação> <num1> <num2>\n", argv[0]);
fprintf(stderr, "Operações: add, sub, mul, div\n");
return 1;
}
// Analise a operação
char* operation = argv[1];
// Converta os argumentos em números
double num1 = atof(argv[2]);
double num2 = atof(argv[3]);
// Realize o cálculo com base na operação
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) {
// Verifique a divisão por zero
if (num2 == 0) {
fprintf(stderr, "Erro: Divisão por zero\n");
return 1;
}
result = divide(num1, num2);
printf("%.2f / %.2f = %.2f\n", num1, num2, result);
} else {
fprintf(stderr, "Erro: Operação inválida\n");
fprintf(stderr, "Operações suportadas: add, sub, mul, div\n");
return 1;
}
return 0;
}
// Funções de operação aritmética
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;
}
- Compile o programa:
gcc calc.c -o calc
- Execute a calculadora com diferentes operações:
## Adição
./calc add 5 3
## Subtração
./calc sub 10 4
## Multiplicação
./calc mul 6 7
## Divisão
./calc div 15 3
## Casos de erro
./calc div 10 0
./calc pow 5 2
Exemplo de saída:
## Adição
5.00 + 3.00 = 8.00
## Subtração
10.00 - 4.00 = 6.00
## Multiplicação
6.00 * 7.00 = 42.00
## Divisão
15.00 / 3.00 = 5.00
## Divisão por zero
Erro: Divisão por zero
## Operação inválida
Erro: Operação inválida
Operações suportadas: add, sub, mul, div
Conceitos Chave
- Combine a análise de argumentos com a lógica funcional
- Lide com diferentes cenários de operação
- Forneça mensagens de erro claras
- Use funções separadas para diferentes operações
- Valide a entrada e lide com casos extremos
Resumo
Neste laboratório, você aprenderá como analisar argumentos de linha de comando em programação C. Primeiro, você entenderá os conceitos fundamentais de argumentos de linha de comando, incluindo os parâmetros argc e argv na função main(). Em seguida, você aprenderá como acessar o número de argumentos e recuperar seus valores. Além disso, você explorará o tratamento de argumentos inválidos e implementará uma ferramenta simples de linha de comando. Ao final deste laboratório, você terá o conhecimento e as habilidades para utilizar efetivamente argumentos de linha de comando em seus programas C.



