Estoy haciendo un programa simple en C que le preguntará su edad y sexo. Si su género no es M o F, el programa le pedirá una entrada diferente. Si su edad es menor a cero, el programa requerirá otra entrada. Este es mi código:
#include<stdio.h> int main(){ int a; char g; entry: printf("%s","AGE : "); scanf("%d", &a); getchar(); insert: printf("%s","GENDER :"); scanf("%s", &g); getchar(); while (a < 0){ goto entry; } switch(g){ case 'M':{ printf("I am a %d yr old male", a);break; } case 'F':{ printf("I am a %d yr old female", a);break; } default:{ goto insert; break; } } return 0; }y este es un ejemplo del programa ejecutándose
EDAD : 21
GENERO M
soy un varón de 0 años
Aunque detecté una rareza (vea el comentario grande) en el código, sale como esperaba, por lo que puede usar un enfoque como este:
#include<stdio.h> #include<stdbool.h> int main(){ int age, a; char g; bool validInput; do { validInput = true; printf("%s","AGE : "); scanf("%d", &age); /* * If you use directly the 'a' var, somehow it will not print * input age. That's why I had to use a = age assignment. * This is weird, if someone knows why this happens let me * know please. */ a = age; if(a < 0) { validInput = false; } printf("%s","GENDER : "); scanf("%c", &g); getchar(); if(g != 'M' && g != 'F') { validInput &= false; } } while(!validInput); switch(g){ case 'M': printf("I am a %d yr old male\n", a); break; case 'F': printf("I am a %d yr old female\n", a); break; default: printf("Oops! Something went wrong...\n"); } return 0; }