Как использовать цикл do-while В СТРУКТУРЕ SWITCH-CASE в C / C ++ для перезапуска программы с самого начала? - PullRequest
0 голосов
/ 27 октября 2019

В этой игре умножения я должен сгенерировать два случайных числа и умножить их. Пользователь должен угадать правильный продукт. После игры пользователь может либо перезапустить игру, либо выйти (наряду с другими вариантами отображения / сброса статистики). Я должен использовать структуру переключателей для выбора, который выбирает пользователь после игры. Я также знаю, что для перезапуска / выхода из игры нужно использовать цикл do-while, но Я не знаю, что поставить вместо отмеченных жирным шрифтом комментариев (после случаев 1 и 3) . Заранее спасибо, что нашли время, чтобы прочитать. Любая помощь очень ценится!

#include <stdio.h>
#include <stlib.h>
#include <time.h>
#include <math.h>

int main () {

//Start do-while loop
do {

//Display rules of the game to the user.
printf("Two random numbers (1-12) will be generated and displayed. The objective of this game is to correctly guess the product of the numbers.");

//Generate two random integers between 1 and 12 and display them to the user
int i;
int n1;
int n2;
srand(time(NULL));
for(i = 1; i<=12;i++)
{
 n1 = 1 + rand() % 12; 
 n2 = 1 + rand() % 12;
 printf("The two random numbers generated are : %d and %d\n", n1,n2);
}

//Prompt the user to enter the product of the two numbers
int a;
printf("Enter the product of the two numbers: ");
scanf("%d", &a);

//Determine and display if or not the answer was right
int countCorrect;
int countIncorrect;
int product = n1*n2;
if (a == product)
{
printf("Correct response!");
countCorrect++;
}
else 
{
printf("Incorrect response, the correct answer is: %d\n", product);
countIncorrect++;
}

//Start switch-case structure for post-game options
int choice;
switch (choice)
{
case 1:
printf("You have chosen to play again");
**//How do I restart the program so the user can play again?**
break;

case 2:
printf("You have chosen to see statistics");
printf("The number of correct answers are: %d\n", countCorrect);
printf("The number of incorrect answers are: %d\n", countIncorrect);
break;

case 3:
printf("You have chosen to reset statistics");
countCorrect = 0;
countIncorrect = 0;
break;

case 4:
printf("You have chosen to quit");
**//How do I quit the program?**
break;

default:
printf("Invalid number! Please enter a number from 1 to 4.");
break;
}
}

1 Ответ

0 голосов
/ 27 октября 2019

Несколько вещей, которые нужно исправить. При объявлении переменных рекомендуется инициализировать их во время объявления. Вместо int a; a = x; И объявлять переменные только при необходимости. Но это, очевидно, может сводиться к предпочтениям и практике. В C89 переменные должны были быть объявлены в верхней части области видимости, но я могу сказать, что вы не компилируете C89. Вам также не нужно было зацикливаться на ранде 12 раз. Достаточно всего двух звонков, если вы хотите два отдельных целых. Имейте в виду, что ранд не очень хорош, но для практики это нормально. Размещение новой строки после оператора print может сделать вывод более аккуратным. countCorrect и countIncorrect были объявлены, но не инициализированы в 0, а затем увеличены. Это плохая практика, потому что вы не знаете начальное значение любой переменной и не получите точный счет. Я предполагаю, что вы хотите выйти только тогда, когда пользователь вводит 4, но продолжать цикл в противном случае? Поместите переключатель за пределы цикла, после того как пользователь угадает продукт, прочитайте выбор пользователя и используйте это значение в конце цикла do while.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int guess(){
    int x = 1+rand()%12;
    int y = 1+rand()%12;

    printf("The two random numbers generated are : %d and %d\n", x,y);
    printf("Enter the product of the two numbers: ");
    int z = 0;
    scanf("%d", &z);
    if(z == (x*y)){
        printf("Correct response!\n");
        return 1;
    }
    printf("Incorrect response, the correct answer is: %d\n", x*y);
    return 0;
}
int main () {
    srand(time(NULL));
    printf("Two random numbers (1-12) will be generated and displayed. The objective of this game is to correctly guess the product of the numbers.\n");
    int correct = 0;
    int incorrect = 0;
    int choice = 1;
    do{
        if(choice==1){
            if(guess()){

                ++correct;
            }else{
                ++incorrect;
            }
        }
        printf("Enter 1 to play again\nEnter 2 to see statistics\nEnter 3 to reset statistic\nEnter 4 to quit:");

        scanf("%d",&choice);
        switch (choice) {
            case 1:
                break;
            case 2:
                printf("You have chosen to see statistics\n");
                printf("The number of correct answers are: %d\n", correct);
                printf("The number of incorrect answers are: %d\n", incorrect);
                break;

            case 3:
                printf("You have chosen to reset statistics\n");
                correct = 0;
                incorrect = 0;
                break;

            case 4:
                printf("You have chosen to quit\n");
                break;
            default:
                printf("Invalid number! Please enter a number from 1 to 4.\n");
                break;
        }
    }while(choice !=4);
    return 0;
}
...