我正在开发一个程序来帮助我进行世界建设,该计划会根据用户选择的国家(德语,拉丁语,东部)随机生成定居点(村庄,村庄,城镇,城市)。不幸的是,我的代码在“ 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)
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()”函数。
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,因此永远不会执行这些循环。