Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

295
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda