Что заставляет мой скрипт ролика для игры в кости трескать sh при вводе чего-то вроде "10d100" - PullRequest
0 голосов
/ 16 июня 2020

Я просмотрел свой сценарий, но не могу понять, что дает мне эту ошибку. Когда я запускаю что-то вроде «10d100», скрипт вылетает без вывода результатов. В остальном скрипт работает нормально.

Кроме того, «Журнал» - это просто функция cout, которую я сделал с файлом заголовка.

int main()
{
    std::string input;
    std::string numD;
    std::string numF;
    unsigned short int numDice{};
    unsigned short int numFaces{};
    unsigned short int rollTotal{0};


    while (1)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11);

        Log("Input your roll (ex. 4d6, 1d20)\n\n");

        getline(std::cin, input);

        if (input.size() == 0) {numDice = 1; numFaces = 20; break;}
        if (isdigit(input[0])) {numD.push_back(input[0]); }
        else { Log("Please use the format (XXdXX)\n\n"); return main();}


        if (isdigit(input[1])) {numD.push_back(input[1]); numDice = std::stoi(numD); }
        else if (isalpha(input[1])) { numDice = std::stoi(numD); }

        if (isdigit(input[2])) {numF.push_back(input[2]); }


        if (isdigit(input[3])) {numF.push_back(input[3]);}
        else {numFaces = std::stoi(numF); break;}

        if (isdigit(input[4])) {numF.push_back(input[4]);}
        else {numFaces = std::stoi(numF); break;}

        if (isdigit(input[5])) {numF.push_back(input[5]);}
        else {numFaces = std::stoi(numF); break;}

        break;

    }

    srand(time(NULL));

    Log ("You got:\n");
    for (int i{0}; i < numDice; i++)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);

        int x{1 + rand() % numFaces};
        std::cout << x << "\n";
        rollTotal += x;
    }
    if (numDice != 1) {std::cout << "\n" << rollTotal << "\n\n";}
    else {Log("\n");}
    return main();
}
...