循环不完整

时间:2016-11-14 12:51:52

标签: c loops

我刚刚开始学习编码大约2个月,因为我正在学习。 我的代码工作(有点),但在第一个循环之后,它不会显示主要功能的第一行(“你已经被给了20个pokeballs,embrak在你成为一个Pokeman大师!!! :),我不知道为什么!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int pokeball = 20;
int rand_num;
int PokemonCaught[5] = { 0, 0, 0 ,0, 0 };
int poke_captured = 0;
int rungame = 1;
int stopgame = 1;
int total;

int randomnum();
int encounter_rate();
int pokemon_met();
void BallThrow();
void CaughtPokemon();
void checkball();
void PokeSummary();
char exitno();
int clear();

int main()
{
    printf("You have been given 20 pokeballs, embrak on you quest on becoming a Pokeman Master!!!\n");
    getchar();

    do
    {
        checkball();
        encounter_rate();
        pokemon_met();
    } while (stopgame == 0);

    PokeSummary();

    return 0;
}

int randomnum()
{
    srand(time(NULL));
}

int encounter_rate()
{
    randomnum();
    rand_num = rand() % 100;
}

int pokemon_met()
{
    if (rand_num <= 30)
    {
        printf("A wild Margikarp appeared!.\n");
        printf("Press ENTER to throw a pokeball!. \n");
        getchar();

        rungame = 1;
        BallThrow();
    }

    else if (rand_num <= 50)
    {
        printf("A wild Charmander appeared!.\n");
        printf("Press ENTER to throw a pokeball!. \n");
        getchar();

        rungame = 1;
        BallThrow();
    }

    else if (rand_num <= 70)
    {
        printf("A wild Jigglypuff appeared!.\n");
        printf("Press ENTER to throw a pokeball!. \n");
        getchar();

        rungame = 1;
        BallThrow();
    }

    else if (rand_num <= 85)
    {
        printf("A wild Pikachu appeared!.\n");
        printf("Press ENTER to throw a pokeball!. \n");
        getchar();

        rungame = 1;
        BallThrow();
    }

    else 
    {
        printf("A wild Dragonite appeared!.\n");
        printf("Press ENTER to throw a pokeball!. \n");
        getchar();

        rungame = 1;
        BallThrow();
    }
}

void checkball()
{
    if (pokeball > 0)
    {
        stopgame = 0;
    }
    else
    {
        stopgame = 1;
    }
}

void BallThrow()
{
        randomnum();
        int BallChance;
        int PokeRun;
        BallChance = rand() % 2;
        pokeball = pokeball - 1;
        if (BallChance == 1)
        {
            printf("Gotcha!\n");
            printf("Number of Pokeball left: %d\n", pokeball);
            printf("Press ENTER to continue your journey!\n\n");
            poke_captured = poke_captured + 1;
            CaughtPokemon();
            getchar();

            if (pokeball == 0)
            {
                printf("Your pokeball has used up!\n");
                printf("Press ENTER to check the summary of your journey\n");

                getchar();

                PokeSummary();
            }
        }
        else if (BallChance == 0)
        {
            PokeRun = rand() % 2;
            printf("The pokemon broke free!!!\n");
            if (PokeRun == 0)
            {
                if (pokeball == 0)
                {
                    printf("Your pokeball has used up!\n");
                    printf("Press ENTER to check the summary of your journey\n");

                    getchar();

                    PokeSummary();
                }
                else
                {
                    printf("Number of Pokeball left: %d\n", pokeball);
                    printf("Press ENTER to throw pokeball!\n\n");
                    getchar();

                    BallThrow();
                }
            }
            else if (PokeRun == 1)
            {
                printf("Oh no! The pokemon ran away!\n");
                printf("Number of Pokeball left: %d\n", pokeball);
                printf("Press ENTER to continue your journey!\n\n");
                getchar();
                if (pokeball == 0)
                {
                    printf("Your pokeball has used up!\n");
                    printf("Press ENTER to check the summary of your journey\n");

                    getchar();

                    PokeSummary();

                }
            }
        }
}

void CaughtPokemon()
{

    if (rand_num <= 30)
    {
        PokemonCaught[0] = PokemonCaught[0] + 1;
    }
    else if (rand_num <= 50)
    {
        PokemonCaught[1] = PokemonCaught[1] + 1;
    }
    else if (rand_num <= 70)
    {
        PokemonCaught[2] = PokemonCaught[2] + 1;
    }
    else if (rand_num <= 85)
    {
        PokemonCaught[3] = PokemonCaught[3] + 1;
    }
    else if (rand_num <= 95)
    {
        PokemonCaught[4] = PokemonCaught[4] + 1;
    }
}

void PokeSummary()
{
    int point0, point1, point2, point3, point4, total;

    point0 = (PokemonCaught[0]) * 10;
    point1 = (PokemonCaught[1]) * 30;
    point2 = (PokemonCaught[2]) * 30;
    point3 = (PokemonCaught[3]) * 50;
    point4 = (PokemonCaught[4]) * 70;
    total = point0 + point1 + point2 + point3 + point4;

    printf("You have successfully caught %d Pokemon!\n\n", poke_captured);
    printf("You have caught:\n");
    printf("Margikarp = %d  (%dpoints)\n", PokemonCaught[0], point0);
    printf("Charmander = %d (%dpoints)\n", PokemonCaught[1], point1);
    printf("Jigglypuff = %d (%dpoints)\n", PokemonCaught[2], point2);
    printf("Pikachu = %d    (%dpoints)\n", PokemonCaught[3], point3);
    printf("Dragonite = %d  (%dpoints)\n", PokemonCaught[4], point4);
    printf("\nTotal points = %d\n", total);

    exitno();
}

char exitno()
{

    char stay;

    printf("Press 'y' to continue, press any other key to quit.");
    scanf(" %c", &stay);

    if (stay == 'y' || stay == 'Y')
    {
        clear();
        return (main);
    }
    else
    {
        printf("Thank you for playing!!");
        exit(0);
    }
}

int clear()
{
    total = total * 0;
    poke_captured = poke_captured * 0;
    PokemonCaught[0] = PokemonCaught[0] * 0;
    PokemonCaught[1] = PokemonCaught[1] * 0;
    PokemonCaught[2] = PokemonCaught[2] * 0;
    PokemonCaught[3] = PokemonCaught[3] * 0;
    PokemonCaught[4] = PokemonCaught[4] * 0;
    pokeball = pokeball + 20;
}

我感谢任何帮助,我知道我的代码远非体面(叹气) 。感谢

2 个答案:

答案 0 :(得分:0)

这不在你的do-while循环中。 如果您希望每次都执行它,那么只需将其向下移动到循环中即可。否则,您的程序将在操作的前几毫秒内移过。或者,修改它(可能将其置于一个新函数中)以打印出在程序执行期间可能发生变化的一些信息 - 例如,当前剩余的pokeball数量。

答案 1 :(得分:0)

char exitno()函数中调用main时出错:

char exitno() {

char stay;

printf("Press 'y' to continue, press any other key to quit.");
scanf(" %c", &stay);

if (stay == 'y' || stay == 'Y')
{
    clear();
    return ((char)main()); // main it should be called using parenthesis
}
else
{
    printf("Thank you for playing!!");
    exit(0);
}

}