为什么我的“ main()”函数不会调用void函数?

Sam*_*orn -1 c++ function

我正在开发一个程序来帮助我进行世界建设,该计划会根据用户选择的国家(德语,拉丁语,东部)随机生成定居点(村庄,村庄,城镇,城市)。不幸的是,我的代码在“ main()”函数处暂停,因为它不会调用我创建的“ settlementCreation()” void函数。

我试过将要调用的函数移到“ main()”函数上方,或者将我通常的创建函数的方法移到上面,在下面定义它的内容,但是这些都不起作用。由于我有限的C ++编写经验,所以我找不到其他解决方案。

主功能:

int main() {
    char tempChoice{};
    bool isMakingSettlement = true;
    while (isMakingSettlement = true) {
        cout << "Create a settlement? (y/n): ";
        cin >> tempChoice;
        cout << "\n\n";
        if (tempChoice == 'y') {
            settlementCreation();
        } else {
            isMakingSettlement = false;
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

SettlementCreation()函数:

void settlementCreation() {
    int tempType{};
    int tempNation{};
    bool isTypeValid = false;
    bool isNationValid = false;
    while (isTypeValid = false) {
        cout << "What type of settlement would you like to create?:";
        cout << "\n     1. Hamlet";
        cout << "\n     2. Village";
        cout << "\n     3. Town";
        cout << "\n     4. City\n";
        cin >> tempType;
        if (tempType >= 1 && tempType <= 4) {
            isTypeValid = true;
        } else {
            cout << " is an invalid choice, please select a valid choice.";
        }
        cout << "\n\n";
    }
    while (isNationValid = false) {
        cout << "What nation would you like your settlement to be in?: ";
        cout << "\n     1. Latin";
        cout << "\n     2. German";
        cout << "\n     3. Eastern\n";
        cin >> tempNation;
        if (tempNation >= 1 && tempNation <= 3) {
            isNationValid = true;
        } else {
            cout << " is an invalid choice, please select a valid choice.";
        }
        cout << "\n\n";
    }
    Settlement objSettlement(tempType,tempNation);
}
Run Code Online (Sandbox Code Playgroud)

因此,该程序应该允许用户在重定向到Settlement对象构造函数以创建对象的objSettlement实例之前选择国家和结算类型。但是,通常的结果只是一个无限循环:“创建结算?(y / n):”在没有响应的情况下,我试图关闭程序或转到“ settlementCreation()”函数。

BoB*_*ish 6

while (isMakingSettlement = true) {
Run Code Online (Sandbox Code Playgroud)

这不检查是否isMakingSettlement为true。它设置 isMakingSettlement为true!这意味着while循环中的检查总是可以看到true,因此永远不会停止巡视。

使用while (isMakingSettlement == true)。

(或者while (isMakingSettlement),或者while (true == isMakingSettlement);都很好,这是一种风格选择,尽管最后一个可以帮助您捕获此错误!)。

对于其他所有while循环也是如此。


假设您已解决上述问题,那么下一个问题将在这里:

bool isTypeValid = false;
bool isNationValid = false;
while (isTypeValid == false) { // once corrected
    // ... never get here!
while (isNationValid == false) { // once corrected
    // ... never get here!
Run Code Online (Sandbox Code Playgroud)

您总是将bools 设置为false,因此永远不会执行这些循环。

  • 更好的是,只需使用`while(isMakingSettlement)`。 (4认同)
  • @SamsyTheUnicorn您怎么知道,它没有被调用?您是否意识到在代码中的多个地方都存在类似的错误? (2认同)