EnzoFerber
(usa FreeBSD)
Enviado em 15/01/2016 - 09:16h
Olá, tudo bom?
Fiz algumas modificações no seu programa pra você começar a ter uma idéia do que fazer.
Sempre que for construir algum programa, tente pensar nas coisas que irão se
repetir, como por exemplo a forma de perguntar e definir se a resposta está certa ou errada. Computadores são execelentes repetidores. Quando você conseguir definir o que irá se repetir, você pode transformar essa ação em uma
função. Isso diminui drasticamente o tamanho do seu código, reduz a possibilidade de erros e diminui os custos com manutenção do código.
O programa a seguir faz exatamente isso. Retirei todas as repetições da função
main e implementei a função
perguntar. Essa função é brevemente explicada nos comentários que antecedem sua declaração no código abaixo. Além disso, ela também retorna 1 caso a resposta esteja correta e 0 caso contrário. Isso permite criar um sistema básico de pontuações. Como exercício, tente aprimorar o programa da seguinte forma:
1. Como fazer numeração automática das perguntas?
2. Como fazer perguntas aleatórias?
3. Como fazer respostas aleatórias?
4. Como dar ao programa apenas a resposta correta e deixar que ele produza as outras opções? (essa é difícil, pois os tipos de dados das respotas são diferentes! ;)
5. Como implementar o (4) aleatóriamente?
6. Como implementar a pergunta "Quanto é sua idade x 13?" utilizando uma função de perguntas (retirei essa como exercício pra você).
7. Como classificar as perguntas em fáceis/médias/difíceis e utilizar pontuação ponderada com base na dificuldade?
8. Como mudar aleatóriamente os textos de feedback? (você acertou, você errou)
Espero ter ajudado,
Enzo Ferber
[]'s
P.S.: Quando for postar códigos aqui no VoL, utilize a tag [ code] e [ /code] (sem os espaços). Caso o código seja extenso, utilize um dos recursos abaixo, pois são excelentes para compartilhamento rápido de código, além possuírem
syntax highlighting.
1.
www.codepad.org
2.
www.ideone.com
3.
www.pastebin.com
#include <stdio.h>
#include <stdlib.h>
/* Essa rotina ira fazer as perguntas.
*
* @Argumentos:
* @pergunta string com a pergunta a ser feita
* @respostas string com todas as respostas
* @correta numero da resposta correta
*
* A função retorna 1 ponto se voce acertar, caso contrario
* retorna 0. Isso facilita a contagem total de pontos.
*/
int perguntar(char *pergunta, char *respostas, int correta)
{
int r;
puts(""); puts(pergunta); puts(respostas);
scanf("%d", &r);
if (r == correta) {
puts("Parabens, voce acertou! +1 ponto!");
return 1;
}
puts("Que pena, voce errou! Quem sabe na proxima...");
return 0;
}
int main(void)
{
char name[21];
int i, idade, pontos = 0;
char *perguntas[] = {
"(1). Quanto da 20 por cento de 100?",
"(2). Quem robou mais?",
"(3). Quanto tempo demora para terra dar uma volta completa em torno de si?",
"(4). Quantos km/s tem a velocidade da luz?",
"(5). Qual a melhor bebida que existe?",
"(6). Qual a cor do cavalo branco de napoleao?",
"(7). Quantos km2 tem a superficie da terra?"
};
char *respostas[] = {
"\t(1) 20\n\t(2) 10\n\t(3) 30",
"\t(1) lula\n\t(2) Getulio vargas\n\t(3) dilma",
"\t(1) 1440 minutos\n\t(2) 1200 minutos\n\t(3) 1500 minutos",
"\t(1) 250,000 km/s\n\t(2) 500,000 km/s\n\t(3) 300,000 km",
"\t(1) agua\n\t(2) vinho\n\t(3) cerveja",
"\t(1) preto\n\t(2) branco\n\t(3) azul",
"\t(1) 510.100.000 km2\n\t(2) 500.000.000 km2\n\t(3) 525.000.240 km2"
};
int corretas[] = {1,3,1,3,1,2,1};
/* pergunta nome e idade */
printf("Ola, qual e seu nome? "); scanf("%s", &name);
printf("Quantos anos voce tem? "); scanf("%i", &idade);
/* saldacoes do jogo e modo de jogar */
printf("Bem-vindo (a) %s, ao Perguntas e Respostas!\n\n", name);
printf("\tDigite apenas o numero da resposta correta\n\n");
for(i = 0; i < 7; i++)
pontos += perguntar(perguntas[i], respostas[i], corretas[i]);
printf("Obrigado por jogar comigo %s!\n", name);
printf("Voce fez %d pontos!\n", pontos);
/* criado por felipe silva de natividade RJ */
return 0;
}
$ indent -kr -i8 src.c
"(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right." - linux/Documentation/CodingStyle - TORVALDS, Linus.