c ++程序不会在void()函数中退出循环

时间:2016-10-21 20:06:26

标签: c++ c++11

您好我正在完成作业并且遇到了这个程序的问题。

“23”的游戏是一个双人游戏,从一堆23个牙签开始。玩家轮流退出,一次取出1,2或3个牙签。撤回最后一根牙签的玩家输掉比赛。写一个播放“23”的人与计算机程序。人类应该始终先行动。当它是计算机时,它应该按照以下规则进行播放:

  • 取出4-X牙签,其中X是人类在前一回合中退出的牙签数。

  • 如果剩下2到4根牙签,那么电脑应该取出足够的牙签,留下1根牙签。

  • 如果剩下一根牙签,则计算机必须拿走它并且它会丢失。

当人类玩家输入要撤回的牙签数量时,程序应执行输入验证。确保输入的数字介于1和3之间,并且玩家不会尝试取出比堆中存在的更多牙签。

这是我的代码。任何帮助将不胜感激。

#include <iostream>
using namespace std;

void compAlgorithm(int totalTp, int compTp, int userTp, int countr) {
do {
    if (totalTp > 4) {
        compTp = 4 - userTp;
        totalTp += totalTp - compTp;
        countr--;
    }
    if (totalTp >= 2 && totalTp <= 4) {
        switch (totalTp) {
            case 2:
                totalTp += totalTp - 1;
                countr--;
                break;
            case 3:
                totalTp += totalTp - 2;
                countr--;
                break;
            case 4:
                totalTp += totalTp - 3;
                countr--;
                break;
            }
        }
    } while (countr == 1);
}

int main() {
    int userTp = 0;
    int compTp = 0;
    int totalTp = 23;
    int countr = 0;

    do {
        if (countr == 0) {
            cout << "please enter a vale of toothpics between 1 and 3" << endl;
            cin >> userTp;
            totalTp += totalTp - userTp;
            countr++;
        }
        else if (countr == 1) {
            compAlgorithm;
        }
    } while (totalTp >= 2);

    if (totalTp == 1 && countr == 1) {
        cout << "you win" << endl;
    }
    else if (totalTp > 0 && totalTp < 2 && countr == 0) {
        cout << "please enter a vale of toothpics between 1 and 2" << endl;
        cin >> userTp;
        totalTp = totalTp - userTp;
        switch (totalTp) {
        case 1:
            cout << "you win" << endl;
            break;
        case 2:
            cout << "you loose" << endl;
            break;
        }
    }
    system("pause");
    return 0;
}

提前感谢。

2 个答案:

答案 0 :(得分:3)

这是错误的:

else if (countr == 1) {
    compAlgorithm;
}

如果这是您的意图,您必须将参数传递给此函数调用。目前,这一行compAlgorithm;什么都不做,可能导致无限循环。

答案 1 :(得分:0)

我认为这可能是因为如果您没有指定任何内容,C ++会通过函数将参数作为值传递。在函数compAlgorithm中,您必须在totalTpcountr中使用引用,因为您希望它们在范围之外进行更改。我留下这个link来了解更多相关信息。