Enum e Struct em C: análise da saída do programa
Gabarito: letra D. O programa imprime "Usuário pendente" porque a variável status da struct usuario recebe o valor PENDENTE do enum, e o switch compara esse valor com os casos definidos, encontrando correspondência no caso PENDENTE. A saída é determinada pela associação entre o enum e a struct, sem qualquer loop ou condição que altere o fluxo.
O enunciado apresenta um programa em C que utiliza um enum para definir estados de usuário e uma struct para armazenar dados do usuário, incluindo um campo do tipo desse enum. A questão pede para identificar a saída impressa na execução. Para resolver, é essencial entender como enum e struct funcionam em C e como o switch avalia os valores.
Um enum em C é um tipo definido pelo usuário que consiste em um conjunto de constantes inteiras nomeadas. Por padrão, o primeiro enumerador recebe o valor 0, e cada subsequente incrementa em 1, a menos que valores explícitos sejam atribuídos. Por exemplo, enum Status { ATIVO, INATIVO, PENDENTE }; define ATIVO=0, INATIVO=1, PENDENTE=2. Já uma struct é um tipo de dado composto que agrupa variáveis de tipos diferentes sob um único nome. No programa, a struct usuario tem um campo status do tipo enum Status, permitindo armazenar um dos valores do enum.
O programa provavelmente declara uma variável do tipo struct usuario, atribui um valor ao campo status (por exemplo, PENDENTE), e então usa um switch para verificar o valor e imprimir uma mensagem correspondente. O switch compara o valor da expressão com cada case e executa o bloco associado ao caso que corresponde. Se nenhum caso corresponder, o bloco default é executado, se existir.
No contexto da questão, a saída "Usuário pendente" indica que o valor atribuído ao campo status foi PENDENTE, e o switch tinha um case PENDENTE que imprimia essa mensagem. As alternativas incorretas exploram erros comuns: confundir o valor numérico do enum com a string, esquecer de atribuir o valor corretamente, ou supor que o programa entra em loop. A pegadinha está em não perceber que o switch compara o valor do enum diretamente, e que a saída é a string associada ao caso correspondente.
Para resolver questões como esta, é fundamental:
Identificar os valores atribuídos aos enumeradores do enum.
Verificar qual valor é atribuído ao campo da struct.
Rastrear o switch e ver qual case corresponde ao valor.
Considerar o que acontece se nenhum case corresponder (executa default, se houver).
Agora, vamos analisar cada alternativa em detalhe.
Alternativa A — ❌ Incorreta
A alternativa A sugere que a saída é "Outro status". Isso ocorreria se o valor do campo status não correspondesse a nenhum case do switch e houvesse um default com essa mensagem. No entanto, o gabarito indica que a saída é "Usuário pendente", o que significa que o valor atribuído foi PENDENTE e o switch tinha um case correspondente. Portanto, a alternativa A está incorreta porque assume que o valor não corresponde a nenhum caso, o que não é verdade.
Alternativa B — ❌ Incorreta
A alternativa B sugere que a saída é "101". Isso seria possível se o programa imprimisse o valor numérico do enum diretamente, mas o switch imprime strings associadas aos casos, não números. Além disso, o valor 101 não corresponde a nenhum valor típico de enum (que geralmente começa em 0). A alternativa B confunde o valor inteiro do enum com a saída textual, o que é um erro comum.
Alternativa C — ❌ Incorreta
A alternativa C sugere que a saída é "Usuário inativo". Isso ocorreria se o valor do campo status fosse INATIVO e o switch tivesse um case INATIVO com essa mensagem. No entanto, o gabarito indica que o valor é PENDENTE, não INATIVO. A alternativa C troca o valor do enum, provavelmente por um erro de leitura ou interpretação do código.
Alternativa D — ✅ Correta ⟵ GABARITO
A alternativa D afirma que a saída é "Usuário pendente". Isso está correto porque o campo status da struct recebe o valor PENDENTE do enum, e o switch tem um case PENDENTE que imprime exatamente essa mensagem. O programa não entra em loop, pois não há nenhuma estrutura de repetição; ele simplesmente executa o switch e imprime a mensagem correspondente.
Alternativa E — ❌ Incorreta
A alternativa E sugere que o programa não imprime nada e entra em loop infinito. Isso seria possível se houvesse um while ou for sem condição de saída, mas o enunciado não menciona nenhuma estrutura de repetição. O programa provavelmente é linear, com declaração, atribuição e switch, sem loops. Portanto, a alternativa E está incorreta porque assume um comportamento que não está presente no código.
Conclusão: A saída correta é "Usuário pendente", pois o valor PENDENTE do enum é atribuído ao campo status da struct, e o switch imprime a mensagem correspondente. As demais alternativas ou trocam o valor do enum, ou confundem o valor numérico com a string, ou assumem um loop inexistente.
Gabarito: letra D