Médio C
Código de saída personalizado
Enunciado
Crie um programa que receba um número inteiro n como argumento de linha de comando e retorne n como código de saída. Se nenhum argumento for passado, retorne 1. Imprima uma mensagem indicando o código que será retornado.
Requisitos
- Usar
int main(int argc, char *argv[]). - Converter
argv[1]para inteiro comatoi(inclua<stdlib.h>). - Se
argc < 2, retornar 1. - Imprimir
Retornando <n>antes de sair.
Código inicial
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
// complete
return 0;
}
Saída esperada
Retornando 3
Ver dica
Verifique argc antes de acessar argv[1].
Mostrar solução
#include <stdio.h>
#include <stdlib.h> // para atoi
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Nenhum argumento. Retornando 1\n");
return 1; // codigo de erro
}
int n = atoi(argv[1]); // converte string para inteiro
printf("Retornando %d\n", n);
return n; // retorna o valor como codigo de saida
}
Passo a passo
#include <stdlib.h>é necessário para usaratoi.int main(int argc, char *argv[])permite receber argumentos da linha de comando:argcé a contagem eargvo vetor de strings.if (argc < 2)trata o caso sem argumentos, imprimindo aviso e retornando 1.atoi(argv[1])converte o primeiro argumento (string) para inteiro.printfmostra o valor que será retornado.return n;devolvencomo código de saída do processo.
Por que funciona
O valor retornado por main é passado ao sistema operacional como exit status. Valores fora do intervalo 0–255 podem ser truncados, mas para inteiros pequenos funciona como esperado. O uso de argc/argv é a forma padrão de acessar argumentos.
Erros comuns
- Acessar
argv[1]sem verificarargc: se não houver argumento,argv[1]éNULLeatoicausa comportamento indefinido (crash). - Esquecer
#include <stdlib.h>: o compilador pode assumir queatoiretornainte emitir aviso. - Retornar valor negativo: o sistema operacional interpreta como código sem sinal (ex.: -1 vira 255).
Outra forma de resolver
Usar strtol para melhor tratamento de erros:
char *end;
long n = strtol(argv[1], &end, 10);
if (*end != '\0') return 2;
return (int)n;
Saída esperada
Retornando 3