Carregando
0x120Lição 19 de 20

Crie uma ferramenta de linha de comando útil

Leia argumentos, relate erros e devolva um status de saída que um script possa usar.

22 min Questionário com 4 perguntas 1 exercício de código
Ao final desta lição, você saberá
  • Explicar argc e argv
  • Converter texto numérico com strtol
  • Diferenciar stdout, stderr e status de saída

Muitos programas em C são ferramentas iniciadas a partir de um terminal ou de outro programa. O sistema operacional passa os argumentos de linha de comando para main(int argc, char *argv[]). O argc também conta o nome do programa; argv[1] é o primeiro argumento do usuário. Uma boa ferramenta imprime os resultados úteis no stdout, os erros no stderr e devolve um status diferente de zero em caso de falha.

square.c (run locally)
1#include <errno.h>
2#include <stdio.h>
3#include <stdlib.h>
4
5int main(int argc, char *argv[]) {
6    if (argc != 2) {
7        fprintf(stderr, "usage: square NUMBER\n");
8        return 2;
9    }
10    char *end;
11    errno = 0;
12    long n = strtol(argv[1], &end, 10);
13    if (errno == ERANGE || end == argv[1] || *end != '\0' || n < 0 || n > 1000) {
14        fprintf(stderr, "enter a whole number from 0 to 1000\n");
15        return 2;
16    }
17    printf("%ld\n", n * n);
18    return 0;
19}

Compile localmente com gcc -std=c17 -Wall -Wextra square.c -o square e depois experimente ./square 12, ./square 12cats e ./square (no Windows, use square.exe). O atoi não consegue dizer por que a conversão falhou. O strtol dá um ponteiro de fim para você poder rejeitar lixo no final, e o errno relata erros de intervalo.

Experimente

Até 15 XP

Qual canal?

Classifique cada mensagem ou resultado no canal que um script de shell deve usar.

0 de 4 classificadosPontuação 0/0
  • “A resposta calculada: 144”

  • “usage: square NUMBER”

  • “Devolver 2 quando o argumento for inválido”

  • “Devolver 0 depois de uma execução bem-sucedida”

Principais conclusões

  • argc e argv fornecem o texto da linha de comando.

  • O strtol mais as verificações do ponteiro de fim rejeitam números malformados ou fora do intervalo.

  • O stdout carrega os resultados; o stderr e um status de saída diferente de zero carregam as falhas.

Quiz da aula

4 perguntas · aprovação com 3 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em C

Estes exercícios rodam de verdade. Escreva o programa, clique em “Executar testes” e leia o que o compilador informa: aprender a ler as mensagens do compilador é metade do aprendizado de C.

Exercício 1

Rejeite entradas ruins antes de calcular

+25 XP

Leia uma linha do stdin. Aceite só um número inteiro de 0 a 1000 e imprima o quadrado dele. Para entradas malformadas, imprima invalid number. Use strtol e verifique o ponteiro de fim; o executor online fornece o stdin em vez de argumentos de linha de comando.

  • Válido
  • Lixo no final
  • Fora do intervalo
main.c
Carregando editor…

Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…