Home > Blockchain >  Stuck in a C project(Quiz)
Stuck in a C project(Quiz)

Time:12-12

I am a beginner in C and I am working on a quiz. Everything is going well but I want to count the user's correct answers and display them at the end of the quiz using while or for. I have searched for hours but couldn't find anything. If anyone could help me it will be much appreciated!

Here is my code (the non-english are the questions):

#include <stdio.h>

int main() {
    int x, a, answer, B, i;

    printf("Καλώς ήρθατε στο quiz/εργασία:)\n");
    printf("Αυτό το κουίζ περιέχει ερωτήσεις για χώρες επειδή δεν ήθελα να βάλω μαθηματικά\n");
  press:
    printf("Πάτα *1* για έναρξη\n");
    scanf("%d", &x);
    if (x <= 1) {
        printf("Πρεπει να απαντησεις συνολικα 8 ερωτησεις\n");
        goto start;
    } else
    if (x > 1) {
        goto press;
    }
  start:
    switch (x) {
      case 1:
        {
            printf("ποια ειναι η πρωτεύουσα της Ρουμανίας;:\n");
            printf("1=Κραϊοβα, 2=Βουκουρέστη, 3=Βουδαπέστη, 4=Οραντέα\n");
            scanf("%d", &answer);
            if (answer == 2) {
                while (i = 1) {
                    i  = 1;
                }
                printf("Σωστό!Ειναι η 'Βουδαπέστη.'\n");
            } else
            if (answer == 1, 3, 4) {
                printf("Λαθος.\n");
            }
        }
      case 2:
        {
            printf("ποια χώρα κατανάλλωσε το περισσότερο τσάι το 2022;:\n");
            printf("1=Ιρλανδία, 2=Ηνωμένο Βασίλειο, 3=Τουρκία, 4=Ινδονησία\n");
            scanf("%d", &answer);
            if (answer == 3) {
                while (i <= 1) {
                    i  = 1;
                }
                printf("Σωστό!Με τον μέσο Τούρκο να καταναλλωνει 3.16kg ετησίως.\n");
            } else
            if (answer == 1, 2, 4) {
                printf("Λαθος.\n");
            }
        }
      case 3:
        {
            printf("Ποια από τις παρακάτω χώρες έχουν 3 πρωτεύουσες;:\n");
            printf("1=Ελβετία, 2=Νότια Αφρική, 3=Κίνα, 4=Αυστραλία\n");
            scanf("%d", &answer);
            if (answer == 2) {
                while (i <= 2) {
                    i  = 1;
                }
                printf("Σωστό!Ειναι η Νότια Αφρική(1:Κέιπ τάουν, 2:Πρετόρια, 3:Μπλουμφοντέιν.\n");
            } else
            if (answer == 1, 3, 4) {
                printf("Λαθος.\n");
            }
        }
      case 4:
        {
            printf("Ποιανής χώρας ο εθνικός ύμνος δεν έχει στίχους;:\n");
            printf("1=Μάλτα, 2=Νορβηγία, 3=Ισλανδία, 4=Ισπανία\n");
            scanf("%d", &answer);
            if (answer == 4) {
                while (i <= 3) {
                    i  = 1;
                }
                printf("Σωστό!Ειναι η Ισπανία.\n");
            } else
            if (answer == 1, 3, 2) {
                printf("Λαθος.\n");
            }
        }
      case 5:
        {
            printf("ποια ειναι η πρωτεύουσα της Εσθονίας;:\n");
            printf("1=Ταλίν, 2=Τάρτου, 3=Νάρβα, 4=Ρακβερέ\n");
            scanf("%d", &answer);
            if (answer == 1) {
                while (i <= 4) {
                    i =1;
                }
                printf("Σωστό!Ειναι το Ταλίν.\n");
            } else
            if (answer == 2, 3, 4) {
                printf("Λαθος.\n");
            }
        }
      case 6:
        {
            printf("Ποια είναι η μικρότερη χώρα της κεντρικής Αμερικής;:\n");
            printf("1=Ελ Σαλβαδόρ, 2=Ονδούρα, 3=Νικαράγουα, 4=Γουατεμάλα\n");
            scanf("%d", &answer);
            if (answer == 1) {
                while (i <= 5) {
                    i  = 1;
                }
                printf("Σωστό!Είναι το Ελ Σαλβαδόρ με έδαφος μόλις 21,041km²\n");
            } else
            if (answer == 2, 3, 4) {
                printf("Λαθος.\n");
            }
        }
      case 7:
        {
            printf("Ποια χώρα έχει τις περισσότερες ζώνες ώρας;:\n");
            printf("1=Ρωσία, 2=ΗΠΑ, 3=Γαλλία, 4=Ηνωμένο Βασίλειο\n");
            scanf("%d", &answer);
            if (answer == 3) {
                while (i <= 6) {
                    i  = 1;
                }
                printf("Σωστό!Ειναι η Γαλλία με 12 ζώνες ώρας( παραθαλάσσια εδάφη).\n");
            } else
            if (answer == 1, 2, 4) {
                printf("Λαθος.\n");
            }
        }
      case 8:
        {
            printf("Ποια ήπειρος φιλοξενεί τις περισσότερες χώρες;:\n");
            printf("1=Ευρώπη, 2=Νότια Αμερική, 3=Αφρική, 4=Ασία\n");
            scanf("%d", &answer);
            if (answer == 3) {
                while (i <= 7) {
                    i  = 1;
                }
                printf("Σωστό!Ειναι η Αφρική με 54 χώρες.\n");
            } else
            if (answer == 1, 2, 4) {
                printf("Λαθος.\n");
            }
        }
        printf("απαντησες σωστα %d\n",i);
    }
    return 0;
}

I have tried to put the while element in different locations in various forms but nothing worked. The closest I got to "Work" is the answer you answered right- 32767.

CodePudding user response:

There are multiple problems in the code:

  • i is not initialized. If you mean to count the number of correct answers, name the variable count and initialize it to 0.

  • while (i = 1) { i = 1; } is an endless loop as i = 1**sets**ito1instead of comparingito1, which is written i == 1`.

  • all loops while (i <= 2) { i = 1; } are equivalent to if (i <= 2) { i = 3; }. You should probably just count the number of correct answers.

  • if (answer == 1, 3, 4) is a constant test that is always true, because the , in the test expression is an operator that evaluates to its second operand. Note that this test is redundant anyway. You should just use else {

  • the initial iteration using labels and goto statements should be changed.

Here is a modified version:

#include <stdio.h>

int main() {
    int x, answer, count = 0;

    printf("Καλώς ήρθατε στο quiz/εργασία:)\n");
    printf("Αυτό το κουίζ περιέχει ερωτήσεις για χώρες επειδή δεν ήθελα να βάλω μαθηματικά\n");
    for (;;) {
        printf("Πάτα *1* για έναρξη\n");
        if (scanf("%d", &x) != 1) {
            return 1;
        if (x < 1) {
            printf("Πρεπει να απαντησεις συνολικα 8 ερωτησεις\n");
        } else {
            break;
        }
    }
    switch (x) {
      case 1:
        {
            printf("ποια ειναι η πρωτεύουσα της Ρουμανίας;:\n");
            printf("1=Κραϊοβα, 2=Βουκουρέστη, 3=Βουδαπέστη, 4=Οραντέα\n");
            if (scanf("%d", &answer) != 1)
                break;
            if (answer == 2) {
                count  = 1;
                printf("Σωστό!Ειναι η 'Βουδαπέστη.'\n");
            } else {
                printf("Λαθος.\n");
            }
        }
      case 2:
        {
            printf("ποια χώρα κατανάλλωσε το περισσότερο τσάι το 2022;:\n");
            printf("1=Ιρλανδία, 2=Ηνωμένο Βασίλειο, 3=Τουρκία, 4=Ινδονησία\n");
            if (scanf("%d", &answer) != 1)
                break;
            if (answer == 3) {
                count  = 1;
                printf("Σωστό!Με τον μέσο Τούρκο να καταναλλωνει 3.16kg ετησίως.\n");
            } else {
                printf("Λαθος.\n");
            }
        }
      case 3:
        {
            printf("Ποια από τις παρακάτω χώρες έχουν 3 πρωτεύουσες;:\n");
            printf("1=Ελβετία, 2=Νότια Αφρική, 3=Κίνα, 4=Αυστραλία\n");
            if (scanf("%d", &answer) != 1)
                break;
            if (answer == 2) {
                count  = 1;
                printf("Σωστό!Ειναι η Νότια Αφρική(1:Κέιπ τάουν, 2:Πρετόρια, 3:Μπλουμφοντέιν.\n");
            } else {
                printf("Λαθος.\n");
            }
        }
      case 4:
        {
            printf("Ποιανής χώρας ο εθνικός ύμνος δεν έχει στίχους;:\n");
            printf("1=Μάλτα, 2=Νορβηγία, 3=Ισλανδία, 4=Ισπανία\n");
            if (scanf("%d", &answer) != 1)
                break;
            if (answer == 4) {
                count  = 1;
                printf("Σωστό!Ειναι η Ισπανία.\n");
            } else {
                printf("Λαθος.\n");
            }
        }
      case 5:
        {
            printf("ποια ειναι η πρωτεύουσα της Εσθονίας;:\n");
            printf("1=Ταλίν, 2=Τάρτου, 3=Νάρβα, 4=Ρακβερέ\n");
            if (scanf("%d", &answer) != 1)
                break;
            if (answer == 1) {
                count  = 1;
                printf("Σωστό!Ειναι το Ταλίν.\n");
            } else {
                printf("Λαθος.\n");
            }
        }
      case 6:
        {
            printf("Ποια είναι η μικρότερη χώρα της κεντρικής Αμερικής;:\n");
            printf("1=Ελ Σαλβαδόρ, 2=Ονδούρα, 3=Νικαράγουα, 4=Γουατεμάλα\n");
            if (scanf("%d", &answer) != 1)
                break;
            if (answer == 1) {
                count  = 1;
                printf("Σωστό!Είναι το Ελ Σαλβαδόρ με έδαφος μόλις 21,041km²\n");
            } else {
                printf("Λαθος.\n");
            }
        }
      case 7:
        {
            printf("Ποια χώρα έχει τις περισσότερες ζώνες ώρας;:\n");
            printf("1=Ρωσία, 2=ΗΠΑ, 3=Γαλλία, 4=Ηνωμένο Βασίλειο\n");
            if (scanf("%d", &answer) != 1)
                break;
            if (answer == 3) {
                count  = 1;
                printf("Σωστό!Ειναι η Γαλλία με 12 ζώνες ώρας( παραθαλάσσια εδάφη).\n");
            } else {
                printf("Λαθος.\n");
            }
        }
      case 8:
        {
            printf("Ποια ήπειρος φιλοξενεί τις περισσότερες χώρες;:\n");
            printf("1=Ευρώπη, 2=Νότια Αμερική, 3=Αφρική, 4=Ασία\n");
            if (scanf("%d", &answer) != 1)
                break;
            if (answer == 3) {
                count  = 1;
                printf("Σωστό!Ειναι η Αφρική με 54 χώρες.\n");
            } else {
                printf("Λαθος.\n");
            }
        }
    }
    printf("απαντησες σωστα %d\n", count);
    return 0;
}

CodePudding user response:

Allow me to suggest some other code that simplifies things

First of all, you will find soon that goto is not suggested as best practice.

Below find and explanation of the program:

  • I start my main program by creating two arrays, one for the questions and one for the right answers.
  • Then I make a do-while where I loop the question until someone presses 1.
  • When someone presses 1, i loop as many times as the questions. I find the questions number with sizeof(questions)/sizeof(questions[0]) which divides the whole length of questions by the size of a single question element.
  • I this for loop i run a function that takes as parameters the question and the right answer and if my input equals the right answer it returns 1, else 0
  • Returning from the function, I can add the returned value to a variable i declared (iscorrect) which will not be affected if the answer is not correct. But if it is it will be 1.

Ending the loop i have the right answers number in my variable iscorrect

If you wish to have explanations for the right answers you can always add an exrta array an pass it as a parameter to the function, and make it print insted of a simple 'correct' i added for testing.

Functions help you keep your code clean and organized, they also minimise space & time, as you can write it once and call it as many times as you want in your code

Hope I helped

#include <stdio.h>

int AskQuestion (char Question[], int rightanswer){
    int answer = "";
    printf(Question);
    scanf("%d", &answer);
    if(answer==rightanswer){
        printf("Right\n\n");
        return 1;
    }
     printf("Wrong\n\n");
    return 0;
}

int main() {
    int x;
    char questions[3][250] = {
        "Question 1: ..........",
        "Question 2: ..........",
        "Question 3: .........."
        };

        int answers[3] = {
        1,
        2,
        1
        };
  printf("String array Elements are:\n");

    printf("Welcome to the quiz\n");
    do{
        printf("Press *1* to start\n");
        scanf("%d", &x);
    }
    while(x!=1);

    int iscorrect =0;

    int questionslength = sizeof(questions)/sizeof(questions[0]);
    for (int i=0; i<questionslength; i  ){

        char question[] = "";
        int  rightanswer = 1;

        iscorrect  = AskQuestion(questions[i], answers[i]);
    }

    printf("Right answers %d\n",iscorrect);
    return 0;
}

CodePudding user response:

I would recommend first making it as simple as possible. Something like:

#include <stdio.h>

int main()
{
    int answer = 0;
    int count = 0;

    printf("Καλώς ήρθατε στο quiz/εργασία:)\n");
    printf(
        "Αυτό το κουίζ περιέχει ερωτήσεις για χώρες επειδή δεν ήθελα να βάλω μαθηματικά\n");

    printf("ποια ειναι η πρωτεύουσα της Ρουμανίας;:\n");
    printf("1=Κραϊοβα, 2=Βουκουρέστη, 3=Βουδαπέστη, 4=Οραντέα\n");

    scanf("%d", &answer);
    if (answer == 2) {
        printf("Σωστό!Ειναι η 'Βουδαπέστη.'\n");
        count  ;
    } else {
        printf("Λαθος.\n");
    }

    printf("ποια χώρα κατανάλλωσε το περισσότερο τσάι το 2022;:\n");
    printf("1=Ιρλανδία, 2=Ηνωμένο Βασίλειο, 3=Τουρκία, 4=Ινδονησία\n");

    scanf("%d", &answer);
    if (answer == 3) {
        printf("Σωστό!Με τον μέσο Τούρκο να καταναλλωνει 3.16kg ετησίως.\n");
        count  ;
    } else {
        printf("Λαθος.\n");
    }

    printf("Ποια από τις παρακάτω χώρες έχουν 3 πρωτεύουσες;:\n");
    printf("1=Ελβετία, 2=Νότια Αφρική, 3=Κίνα, 4=Αυστραλία\n");

    scanf("%d", &answer);
    if (answer == 2) {
        printf(
            "Σωστό!Ειναι η Νότια Αφρική(1:Κέιπ τάουν, 2:Πρετόρια, 3:Μπλουμφοντέιν.\n");
        count  ;
    } else {
        printf("Λαθος.\n");
    }

    printf("Ποιανής χώρας ο εθνικός ύμνος δεν έχει στίχους;:\n");
    printf("1=Μάλτα, 2=Νορβηγία, 3=Ισλανδία, 4=Ισπανία\n");

    scanf("%d", &answer);
    if (answer == 4) {
        printf("Σωστό!Ειναι η Ισπανία.\n");
        count  ;
    } else {
        printf("Λαθος.\n");
    }

    printf("ποια ειναι η πρωτεύουσα της Εσθονίας;:\n");
    printf("1=Ταλίν, 2=Τάρτου, 3=Νάρβα, 4=Ρακβερέ\n");

    scanf("%d", &answer);
    if (answer == 1) {
        printf("Σωστό!Ειναι το Ταλίν.\n");
        count  ;
    } else {
        printf("Λαθος.\n");
    }

    printf("Ποια είναι η μικρότερη χώρα της κεντρικής Αμερικής;:\n");
    printf("1=Ελ Σαλβαδόρ, 2=Ονδούρα, 3=Νικαράγουα, 4=Γουατεμάλα\n");

    scanf("%d", &answer);
    if (answer == 1) {
        printf("Σωστό!Είναι το Ελ Σαλβαδόρ με έδαφος μόλις 21,041km²\n");
        count  ;
    } else {
        printf("Λαθος.\n");
    }

    printf("Ποια χώρα έχει τις περισσότερες ζώνες ώρας;:\n");
    printf("1=Ρωσία, 2=ΗΠΑ, 3=Γαλλία, 4=Ηνωμένο Βασίλειο\n");

    scanf("%d", &answer);
    if (answer == 3) {
        printf("Σωστό!Ειναι η Γαλλία με 12 ζώνες ώρας( παραθαλάσσια εδάφη).\n");
        count  ;
    } else {
        printf("Λαθος.\n");
    }

    printf("Ποια ήπειρος φιλοξενεί τις περισσότερες χώρες;:\n");
    printf("1=Ευρώπη, 2=Νότια Αμερική, 3=Αφρική, 4=Ασία\n");

    scanf("%d", &answer);
    if (answer == 3) {
        printf("Σωστό!Ειναι η Αφρική με 54 χώρες.\n");
        count  ;
    } else {
        printf("Λαθος.\n");
    }

    printf("απαντησες σωστα %d\n", count);
    return 0;
}
  • Related