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?
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) ...