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

292
Visualizações
Cambiar por defecto no se muestra cuando debería

En mi programa C que usa switch, tengo un problema con mi variable int. mi código es:

 while(1) { printf("0. END\n1. TRANSLATE\n2. TEST FROM LESSON\n3. RANDOM" " WORDS TEST\n4. SHOW DICTIONARY\n5. ADD WORD\n" "6. DELETE WORD\nYOUR CHOICE: "); scanf("%d",&option); fflush(stdin); printf("\n"); switch(option) { case 0: { exit(0); break; } case 1: { system("cls"); translate(); printf("\n"); break; } case 2: { system("cls"); lessons(); printf("\n"); break; } case 3: { randomFromLessons(); printf("\n"); break; } case 4: { system("cls"); allWords(); printf("\n"); break; } case 5: { system("cls"); addWord(); break; } case 6: { system("cls"); deleteWord(); printf("\n"); break; } default: { printf("---------------\n"); printf("WRONG VALUE.\n"); printf("---------------\n\n"); } } }

Cuando escribo 'd' en la opción var. muestra el valor predeterminado, que es lo que quiero, PERO cuando presiono el número 1 que inicia el método llamado "traducir ()" y luego vuelvo al menú principal y presiono 'd' nuevamente, me regresa a "traducir ()" en lugar de mostrando el valor predeterminado.

Cuando uso char en lugar de int, no hay problema. Entonces, ¿cuál es exactamente el problema? ¿Qué sigue pasando? ¿Qué estoy haciendo mal? Entonces, ¿usar char en el interruptor no es la mejor opción en general?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Si desea permitir la entrada de texto, debe leer la entrada como una cadena con fgets y luego convertirla a números enteros según sea necesario.

Si solo desea aceptar números, debe verificar el resultado de scanf para ver si tuvo éxito; en este caso, devolverá 1 cuando tenga éxito, en caso de que haya logrado leer 1 parámetro. Si no tiene éxito, no sobrescribirá la option pero mantendrá el valor anterior; es por eso que obtiene el comportamiento que describe.

Además fflush(stdin); es un comportamiento indefinido ya que fflush nunca fue diseñado para usarse en flujos de entrada. Para simplemente descartar el carácter de avance de línea de stdin, puede agregar un solo getchar() .

Entonces podrías arreglar el código en algo como esto:

 int result; while(1) { result = scanf("%d",&option); getchar(); if(result == 1) break; else printf("some error message\n"); } switch(option) ...
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