Ir ao conteúdo
  • Cadastre-se

ajuda com validação de caractere


antnoia

Posts recomendados

pessoal é o seguinte, tenho que fazer esse exercicio:

1 - um cinema que possui 100 lugares esta sempre com ocupação total, cada espectador tem que responder um questionario depois do filme, nesse questionario perguntam a idade o o que ele achou do filme. a - otimo, b - bom, c - regular, d - ruim, e - pessimo, a idade nao pode ser =0.

precisa ser apresentado os seguintes resultados:

a: a quantidade que responde otimo.

b: a diferença entre as respostas bom e regular

c: a media da idade de quem respondeu ruim.

d: o percentual de respostas pessimo e a maior idade que respondeu pessimo.

e: a diferença entre a maior idade de quem respondeu otimo e a maior idade de quemrespondeu ruim

ai vai o codigo e em segui o que eu nao consegui fazer.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i=0;
char resposta=' ';
int idade=0;
int otimo=0,bom=0,regular=0,ruim=0,pessimo=0;
int incorreto=0;
int idruim=0,idpessimo=0,idotimo=0;
for(i=0;i<100;i++)
{
incorreto=0;
do
{
printf("\nIdade do %d%c espectador:\n",i+1,167);
fflush(stdin);
scanf("%d",&idade);
}
while(idade==0);

printf("\nResposta do %d%c espectador:\n",i+1,167);
fflush(stdin);
printf("A - Otimo\nB - Bom\nC - Regular\nD - Ruim\nE - Pessimo\n");
scanf("%c",&resposta);
strlwr(&resposta);
do
{
switch(resposta)
{


case 'a':
otimo+=1;
if(idade>idotimo)
idotimo=idade;
break;
case 'b':
bom+=1;
break;
case 'c':
regular+=1;
break;
case 'd':
ruim+=1;
idruim=idruim+idade;
break;
case 'e':
pessimo+=1;
if(idade>idpessimo)
idpessimo=idade;
break;
default:
incorreto=1;
break;
}
}
while(incorreto==1);


}

printf("\nRespostas otimo: %d\n",otimo);
if(bom>regular)
{
printf("\nDiferenca entre bom e regular: %d\n",bom-regular);
}
else
{
if(regular>bom)
printf("\nDiferenca entre bom e regular: %d\n",regular-bom);
else
if(regular==0 && bom==0)
{
printf("\nBom e regular nao foram votados!\n");
}
else
{
printf("\nEntre bom e regular nao ha diferenca pois sao valores iguais\n");
}
}
if(ruim>0)
{
printf("\nMedia das idadades das pessoas que responderam ruim: %d\n",idruim/ruim);
}
else
{
printf("\nNinguem respondeu ruim\n");
}

printf("\nPercentual de pessoas que responderam pessimo: %f\n",pessimo/100);
printf("\nMaior idade da pessoa que respondeu pessimo: %d\n",idpessimo);
if(idotimo>idruim)
{
printf("\nDiferenca entre maior idade otimo e maior idade ruim: %d\n",idotimo-idruim);
}
else
{
if(idruim>idotimo)
printf("\nDiferenca entre maior idade otimo e maior idade ruim: %d\n",idruim-idotimo);
else
if(idotimo==0 && idruim==0)
{
printf("\nOtimo e Ruim nao foram votados");
}
else
{
printf("\nEntre as maiores idades de otimo e ruim não ha diferenca\n");
}
}

system("pause");
return (0);
}

na validacao de idade ele só valida a do 1º espectador, a segunda pode ser ivalida que ele aceita, o que tenho que fazer para que ele obrigue o cara a responder uma opcao correta sempre?

na validação da resposta se o cara digitar alguma letra que nao tenha na lista ele trava o programa, como posso fazer para que ele volte e obrigue o cara a responder uma opcao valida?

uso o dev c++

podem ser usadas structs e funções tb, agradeço desde já

Link para o comentário
Compartilhar em outros sites

duas coisas pra facilitar sua vida:


typedef struct Lugares {
int idade;
char resp;
} tLugar;

No seu main você usa então:


int main()
//...
tLugar lugar[100];

for (x=0; x<100; x++) {
lugar[x].idade = pegarIdade(x);
lugar[x].resp = pegarResposta(x);
}

//...
return 0;
}

int pegarIdade(int x) {
int idade = 0;
do {
printf("\nIdade do %d%c espectador:\n",x+1,167);
scanf("%d",&idade);
} while(idade==0);
return idade;
}

char pegarResposta(int x) {
char resp;
do {
printf("\nResposta do %d%c espectador:\n",x+1,167);
printf("a - Otimo\nb - Bom\nc - Regular\nd - Ruim\ne - Pessimo\n");
fflush(stdin);
scanf("%c",&resp);
} while(resp < 'a' || resp > 'e');
return resp;
}

Depois é só percorrer o vetor lugar[] e pegar os dados que quiser.

Por exemplo, pra saber quantos responderam 'otimo':


int otimo = 0;
//...
for (x=0; x<100; x++)
if (lugar[x].resp == 'a') otimo++;

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...