Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

299
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!