Crie uma ferramenta de linha de comando útil
Leia argumentos, relate erros e devolva um status de saída que um script possa usar.
- 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.
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 XPQual canal?
Classifique cada mensagem ou resultado no canal que um script de shell deve usar.
“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.
Rejeite entradas ruins antes de calcular
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
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…