Stack Overflow en español Asked on January 4, 2022
Me gustaría que mi código acepte únicamente las opciones disponibles que le doy al usuario por pregunta, por ejemplo, en la primera pregunta que solo sea capaz el usuario de ingresar las letras "a" y "b" y no otras letras. En alguna otra segunda pregunta lo mismo pero con las opciones "a", "b’, "c", "d" y "e".
Agradecería mucho su ayuda y lo siento por tanta pregunta, gracias. ):
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
char sexo;
int suma;
printf("Indica tu sexo.nna) Masculinonb) Femeninonn");
scanf(" %c", &sexo);
switch (sexo){
case 'a': suma = 50;break;
case 'A': suma = 50;break;
case 'b': suma = 30;break;
case 'B': suma = 30;break;
}
system("pause");
return 0;
}
He realizado el siguiente código que creo puede resolver lo que pretendes:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_QUESTIONS 2
char *Preguntas[MAX_QUESTIONS] =
{
"Indica tu sexo.nna) Masculinonb) Femeninonn",
"Indica tu edad.nna) Menos de 20 añosnb) Entre 20 y 30 añosnnc) Más de 30 añosnn"
};
char *Respuestas[MAX_QUESTIONS]=
{
"abAB",
"abcABC"
};
/* Valida si la respuesta es permitida */
int IsValidAnswer(char charAnswer, int numQuestion);
int main()
{
char charAnswer;
int numQuestion = 0;
/* Este WHILE nos permite recorrer el cuestionario */
while (numQuestion != MAX_QUESTIONS)
{
int nextQuestion = 0;
/* Este WHILE formula la pregunta y nos fuerza a dar una respuesta permitida */
while (!nextQuestion)
{
printf("%s", Preguntas[numQuestion]);
scanf(" %c", &charAnswer);
nextQuestion = IsValidAnswer(charAnswer, numQuestion);
}
numQuestion++;
}
return 0;
}
int IsValidAnswer(char charAnswer, int numQuestion)
{
for(int i=0; i < sizeof(Respuestas[numQuestion]); i++)
{
if (Respuestas[numQuestion][i] == charAnswer) return 1;
}
return 0;
}
He creado dos arreglos, uno con las preguntas y otro con las posibles respuestas. Luego ha sido necesario crear una función que determina si la respuesta dada está entre las posibles respuestas, lo que nos simplifica enormemente el código si queremos extender el cuestionario.
El código permite ampliar el cuestionario así como las respuestas posibles para cada pregunta. Se me ocurre que podría crearse otro arreglo que guarde las respuestas dadas por el usuario para evaluarlas.
Espero te ayude en lo que pretendías.
Answered by Antonio S.F. on January 4, 2022
Lo puedes anidar en un for y en el caso de los cases si a y A se comportan igual puedes juntarlos
char sexo;
int suma;
scanf(" %c", &sexo);
int flag = 0;
for (; flag == 1;)
{
switch(sexo)
{
case 'a':
case 'A':
suma = 50;
flag=1;
break;
case 'b':
case 'B':
suma = 30;
flag=1;
break;
default:
printf("Indica tu sexo.nna) Masculinonb) Femeninonn");
scanf(" %c", &sexo);
}
}
Answered by Iankos on January 4, 2022
No se si hay alguna forma de poner solo las letras que pones pero puedes poner un do while para que si no poner la opción correcta se repita el ciclo. Tomando tu ejemplo seria algo así.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(){
char sexo;
int suma;
printf("Indica tu sexo.nna) Masculinonb) Femeninonn");
do{
scanf(" %c", &sexo);
if(sexo!='a'&&'A'&& sexo!='b'&&'B'){
printf("Opción incorrectaa"); //la a es para que suene un aviso
}
}while(sexo!='a'&&'A'&& sexo!='b'&&'B');
switch (sexo){
case 'a': suma = 50;break;
case 'A': suma = 50;break;
case 'b': suma = 30;break;
case 'B': suma = 30;break;
}
system("pause");
return 0;
}
En el segundo caso en el do while
pones un rango de letras en vez de poner letra por letra. Algo asi
do{
//El codigo que quieras
}while(sexo<'a'&&sexo>'e');
Answered by user184475 on January 4, 2022
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP