困在C项目中(测验)

gdx19jrr  于 2022-12-17  发布在  其他
关注(0)|答案(3)|浏览(161)

我是一个C初学者,我正在做一个测验。一切都很顺利,但我想计算用户的正确答案,并在测验结束时使用whilefor显示它们。我已经搜索了几个小时,但没有找到任何东西。如果有人能帮助我,将不胜感激!
下面是我的代码(非英语部分是问题):

#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;
}

我试过将while元素以各种形式放在不同的位置,但都没有效果。我得到的最接近“工作”的答案是you answered right- 32767

ifmq2ha2

ifmq2ha21#

请允许我建议一些其他的代码来简化事情
首先,您很快就会发现,后藤不是建议的最佳实践。
下面查找和解释该程序:

  • 我通过创建两个数组来启动主程序,一个用于问题,一个用于正确答案。
  • 然后,我做了一个do-while,循环这个问题,直到有人按1。
  • 当有人按1时,我循环的次数和问题的次数一样多。我用 sizeof(questions)/sizeof(questions[0]) 找到问题的编号,它将问题的总长度除以单个问题元素的大小。
  • 在这个for循环中,我运行一个函数,该函数将问题和正确答案作为参数,如果我的输入等于正确答案,则返回1,否则返回0
  • 从函数返回时,我可以将返回值加到我声明的变量(iscorrect)中,如果答案不正确,它不会受到影响,但如果答案正确,它将是+1。

循环结束时,变量中有正确的答案编号 iscorrect
如果你想得到正确答案的解释,你总是可以添加一个exrta数组,并将其作为参数传递给函数,并使其打印出来,而不是我为测试而添加的简单的“correct”。

函数帮助您保持代码整洁有序,它们还可以最大限度地减少空间和时间,因为您可以编写一次,然后在代码中根据需要多次调用它

希望我能帮上忙

#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;
}
laik7k3q

laik7k3q2#

我会建议先把它做得尽可能简单。比如:

#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;
}
oipij1gg

oipij1gg3#

代码中存在多个问题:

  • i未初始化。如果要计算正确答案的数量,请将变量命名为count,并将其初始化为0
  • x一米三纳米一X i = 1 x一米四纳米一X i x一米五纳米一X 1 x一米六纳米一X i x一米七纳米一X 1 x一米八纳米一X i == 1“。
  • 所有的循环while (i <= 2) { i += 1; }都等价于if (i <= 2) { i = 3; }。你可能应该只计算正确答案的数量。
  • if (answer == 1, 3, 4)是一个始终为true的常量测试,因为测试表达式中的,是一个计算结果为第二个操作数的运算符。请注意,无论如何,此测试都是多余的。您应该只使用else {
  • 应当改变使用标签和goto语句的初始迭代。

以下是修改后的版本:

#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;
}

相关问题