Unwanted repetition

Write your question here.
so im doing a schoolwork, im currently trying to make a "who wants to be a millionaire" type of program and when i answer correctly to the first question and pass on to the others, the next questions appear two times for example
[question 1 - answer
question 2 - question 2 - answer]

also its my first post here dont hate on me i dont know how to post topics in here

Put the code you need help with here.
[
void menu();
main()
{
char a,j,k;
int b,c,d,e,f,g,h,i;
srand(time(NULL));
b=rand()%3+1;
c=rand()%3+1;
d=rand()%3+1;
e=rand()%3+1;
f=rand()%3+1;
g=rand()%3+1;
h=rand()%3+1;
setlocale(LC_ALL,"portuguese");
menu();
system("PAUSE");
system("CLS");
printf("Primeira Pergunta\n");
do{
if(b==1)
{

printf("O que é um saxofone?\n");
printf("A - Uma torradeira\n B - Um instrumento musical\n C - Um martelo\n D - Um microfone\n");
printf("A sua escolha: ");
scanf("%c",&a);
switch (a)
{
case 'a':
printf("Errou. A resposta correta era B. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;

case 'b':
printf("ACERTOU. QUE GÉNIO.");
system("PAUSE");
system("CLS");
break;

case 'c':
printf("Errou. A resposta correta era B. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;

case 'd':
printf("Errou. A resposta correta era B. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;
}
}
if(b==2)
{

printf("O que é a via lactea?\n");
printf("A - Uma constelação\n B - Uma marca de leite\n C - Uma autoestrada\n D - Uma galáxia\n");
printf("A sua escolha: ");
scanf("%c",&a);
switch (a)
{
case 'a':
printf("Errou. A resposta correta era D. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;

case 'b':
printf("Errou. A resposta correta era D. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;


case 'c':
printf("Errou. A resposta correta era D. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;

case 'd':
printf("ACERTOU. QUE GÉNIO.");
system("PAUSE");
system("CLS");
break;

}
}
if(b==3)
{


printf("Quem foi o primeiro homem a ir a lua?\n");
printf("A - Louis Amstrong\n B - Donald Trump\n C - Neil Amstrong\n D - Lance Amstrong\n");
printf("A sua escolha: ");
scanf("%c",&a);
switch (a)
{
case 'a':
printf("Errou. A resposta correta era C. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;

case 'b':
printf("Errou. A resposta correta era C. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;


case 'c':
printf("ACERTOU. QUE GÉNIO.");
system("PAUSE");
system("CLS");
break;

case 'd':
printf("Errou. A resposta correta era C. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;
}
}
}while(a!='a'&&a!='b'&&a!='c'&&a!='d');
system("PAUSE");
system("CLS");
do{

printf("Desistir?\n");
printf("1-Sim\n2-Nao\n");
scanf("%d",&j);
if(j==1)
exit(100);
if(j==2)
printf("Boa Sorte");
}while(j!=1&&j!=2);


system("PAUSE");
system("CLS");
printf("Segunda Pergunta\n");
do{
if(c==1)
{

printf("O que é um saxofone?\n");
printf("A - Uma torradeira\n B - Um instrumento musical\n C - Um martelo\n D - Um microfone\n");
printf("A sua escolha: ");
scanf("%c",&a);
switch (a)
{
case 'a':
printf("Errou. A resposta correta era B. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;

case 'b':
printf("ACERTOU. QUE GÉNIO.");
system("PAUSE");
system("CLS");
break;

case 'c':
printf("Errou. A resposta correta era B. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;

case 'd':
printf("Errou. A resposta correta era B. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;
}
}
if(c==2)
{

printf("O que é a via lactea?\n");
printf("A - Uma constelação\n B - Uma marca de leite\n C - Uma autoestrada\n D - Uma galáxia\n");
printf("A sua escolha: ");
scanf("%c",&a);
switch (a)
{
case 'a':
printf("Errou. A resposta correta era D. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;

case 'b':
printf("Errou. A resposta correta era D. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;


case 'c':
printf("Errou. A resposta correta era D. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;

case 'd':
printf("ACERTOU. QUE GÉNIO.");
system("PAUSE");
system("CLS");
break;

}
}
if(c==3)
{


printf("Quem foi o primeiro homem a ir a lua?\n");
printf("A - Louis Amstrong\n B - Donald Trump\n C - Neil Amstrong\n D - Lance Amstrong\n");
printf("A sua escolha: ");
scanf("%c",&a);
switch (a)
{
case 'a':
printf("Errou. A resposta correta era C. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;

case 'b':
printf("Errou. A resposta correta era C. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;


case 'c':
printf("ACERTOU. QUE GÉNIO.");
system("PAUSE");
system("CLS");
break;

case 'd':
printf("Errou. A resposta correta era C. Nao ganhou nada");
system("PAUSE");
system("CLS");
exit(0);
break;
}
}
}while(a!='a'&&a!='b'&&a!='c'&&a!='d');
system("PAUSE");
system("CLS");]

if you run it, it appears the second question twice if you can see anything wrong with this please tell me thank you
I don't often use scanf() and so I might be wrong.
However, what I think is happening is that when this is executed
 
scanf("%c",&a);

the user types a letter such as 'd' and the presses the enter key. That means a newline character remains in the input buffer afterwards.

You can probably deal with that at the next input by telling the scanf to ignore leading whitespace. For example, change this:
 
scanf("%d",&j);
to this:
 
scanf(" %d",&j);
Notice the extra blank space inserted before the % sign.

As for your code, it seems very long. There are probably lots of ways it could be shortened, perhaps using arrays or functions. Here's one suggestion.

Change this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
switch (a)
{
    case 'a':
        printf("Errou. A resposta correta era B. Nao ganhou nada");
        system("PAUSE");
        system("CLS");
        exit(0);
        break;
        
    case 'b':
        printf("ACERTOU. QUE GÉNIO.");
        system("PAUSE");
        system("CLS");
        break;
        
    case 'c':
        printf("Errou. A resposta correta era B. Nao ganhou nada");
        system("PAUSE");
        system("CLS");
        exit(0);
        break;
        
    case 'd':
        printf("Errou. A resposta correta era B. Nao ganhou nada");
        system("PAUSE");
        system("CLS");
        exit(0);
        break;
}
to this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
switch (a)
{
    case 'a':
    case 'c':
    case 'd':
        printf("Errou. A resposta correta era B. Nao ganhou nada");
        system("PAUSE");
        system("CLS");
        exit(0);
        break;
        
    case 'b':
        printf("ACERTOU. QUE GÉNIO.");
        system("PAUSE");
        system("CLS");
        break;
}

Last edited on
A way to use a function to simplify the code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <time.h>

int question(const char * quest, const char * a, const char * b, const char * c, const char * d, char ans);

int main()
{
    srand(time(NULL));
    int b = rand()%3+1;
    int ok;
    char ans;
    
    printf("Primeira Pergunta\n");
    
    switch (b)
    {
        case 1:
                ans = 'B';
                ok = question("O que é um saxofone?", "Uma torradeira", 
                    "Um instrumento musical", "Um martelo", "Um microfone", ans);
                break;
        case 2:
                ans = 'D';
                ok = question("O que é a via lactea?", "Uma constelação",
                    "Uma marca de leite", "Uma autoestrada", "Uma galáxia", ans);
                break;                  
        case 3:
                ans = 'C';
                ok = question("Quem foi o primeiro homem a ir a lua?", "Louis Amstrong", 
                    "Donald Trump", "Neil Amstrong", "Lance Amstrong", ans);
                break;      
    }
       
    if (ok)
        printf("ACERTOU. QUE GÉNIO.");      
    else
        printf("Errou. A resposta correta era %c. Nao ganhou nada", ans);        
    
    return 0;
}

int question(const char * quest, const char * a, const char * b, const char * c, const char * d, char ans)
{
    char ch;
    
    printf("%s\n", quest);
    printf("A - %s\n", a);
    printf("B - %s\n", b);
    printf("C - %s\n", c);
    printf("D - %s\n", d);
    
    do {
        printf("A sua escolha: ");
        scanf(" %c", &ch);
        ch = toupper(ch);
    } while (ch < 'A' || ch > 'D');
          
    if (ch == ans)
        return 1;
    
    return 0;
}


Most of the repetitive work is done by function question(). This can be called for the other questions too, thus cutting down on the coding needed.
Last edited on
Topic archived. No new replies allowed.