Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

253
Visualizações
El menú se imprime dos veces y el valor predeterminado se ejecuta incluso cuando las mayúsculas y minúsculas no coinciden

Estoy tratando de mostrarle al usuario un menú y permitirle elegir entre las opciones. Está en un ciclo while porque tiene que iterar hasta que se elija la opción "e" para salir del programa. Incluí la opción "predeterminada" como una prueba de fallas si el usuario ingresa un valor que no se acepta. El caso predeterminado siempre se ejecuta sin importar lo que haga y el menú siempre aparece dos veces después de la ejecución inicial del código. Intenté cambiar "getchar ()" a scanf y todavía produce el mismo resultado duplicado. También he intentado eliminar el cambio por completo, pero obtengo el mismo resultado usando declaraciones si/entonces. ¡He adjuntado mi código completo y cualquier ayuda es apreciada, gracias!

 #include <stdio.h> #include <stdlib.h> // function for the menu char menu() { printf("Please select from the following menu: \n"); // setting up the menu from here printf("a. input the data files location \n"); printf("b. enter the time interval \n"); printf("c. process and display the US Life Expectancy Data \n"); printf("d. process and display the Statistics of All Data \n"); printf("e. exit the program \n"); } char options(char choice) { switch (choice) { case 'a': printf("choice a\n"); break; case 'b': printf("choice b\n"); break; case 'c': printf("choice c\n"); break; case 'd': printf("choice d\n"); break; case 'e': break; default: // default when none of the cases are matched printf("Invalid input\n"); break; } } // main function int main(void) { char choice; do { menu(); while ((choice = getchar()) == "\n") {}; if (choice == EOF) { exit(1); } options(choice); } while (choice != 'e'); }
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

El problema es que su código no maneja nuevas líneas. En otras palabras, cuando escribe a seguido de ENTER, su código en realidad recibe dos caracteres. La 'a' y la '\n' . Por lo tanto, el menú se imprimirá dos veces y obtendrá una "entrada no válida".

Una solución rápida podría ser:

 choice = getchar(); --> while ((choice = getchar()) == '\n') {};

Dicho esto, deberías cambiar la choice para que sea un int y también hacer:

 int choice; .... .... while ((choice = getchar()) == '\n') {}; if (choice == EOF) { // Fatal input error exit(1); }

Finalmente, es una mala idea tener choice como global. En su lugar, póngalo en main y páselo como argumento a las options de la función. Pero no lo pases al menu . Así que hazlo:

 char options() { --> char options(int choice) {

y

 int main(void) { int choice; do { menu(); while ((choice = getchar()) == '\n') {}; // ignore newlines if (choice == EOF) { // Fatal input error exit(1); } options(choice); } while (choice != 'e'); }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda