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 com atoi (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

  1. #include <stdlib.h> é necessário para usar atoi.
  2. int main(int argc, char *argv[]) permite receber argumentos da linha de comando: argc é a contagem e argv o vetor de strings.
  3. if (argc < 2) trata o caso sem argumentos, imprimindo aviso e retornando 1.
  4. atoi(argv[1]) converte o primeiro argumento (string) para inteiro.
  5. printf mostra o valor que será retornado.
  6. return n; devolve n como 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 verificar argc: se não houver argumento, argv[1] é NULL e atoi causa comportamento indefinido (crash).
  • Esquecer #include <stdlib.h>: o compilador pode assumir que atoi retorna int e 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