使用 goto 函数我的一个用户输入不起作用 (c++)



我正在编写一个程序,让用户通过一系列用户输入和多项选择来创建自己的人(作为对象(。我在最后有一个使用goto功能的确认系统,但当我回到制作时,如果他们不喜欢,第一个名字的用户输入将不起作用,但其他的会起作用(第一次名字用户输入非常好(

以下是代码和解释:

设置东西,制作添加了基本构造函数的类。

#include <iostream>
using namespace std;
class Person{
public:
string FirstName;
string Surname;
string Gender;
int Age;
double Money;
Person(string aFirstName, string aSurname, string aGender, int aAge, double aMoney){
FirstName = aFirstName;
Surname = aSurname;
Gender = aGender;
Age = aAge;
Money = aMoney;
}

}; 

制作最终将放在人身上的变量,并通过用户输入和多项选择获得它们:

int main(){
Error2:
string bFirstName;
string bSurname;
string bGender;
int bAge;
int Choice1;
int YesNo;
cout << "What is your character's First Name?" <<endl;
getline(cin, bFirstName);
cout << "What is your character's Surname?" <<endl;
getline(cin, bSurname);
Error1:
cout << "What is your character's Gender?" <<endl;
cout << "Press 1 for Male" <<endl;
cout << "Press 2 for Female" <<endl;
cout << "Press 3 for Other" <<endl;
cin >> Choice1;
switch(Choice1){
case 1:
bGender = "Male";
break;
case 2:
bGender = "Female";
break;
case 3:
cout << "Type in Gender." <<endl;
cin >> bGender;
break;
default:
cout << "Enter a valid choice next time" <<endl;
goto Error1;
break;

}
cout << "What is your character's Age?" <<endl;
cin >> bAge;

使用goto功能的确认系统,这样他们就可以废弃他们制作的,制作一个新的:

Error3:
cout << "Are you sure you want your character to have these attributes?" <<endl;
cout << "1 for yes, 2 for no" <<endl;
cout << "FirstName: " << bFirstName <<endl;
cout << "Surname: " << bSurname <<endl;
cout << "Gender: " << bGender <<endl;
cout << "Age: " << bAge <<endl;
cin >> YesNo;
if(YesNo == 1){
goto Error4;
} else if(YesNo == 2){
goto Error2;
} else{
goto Error3;
}
Error4:
Person Custom1(bFirstName, bSurname, bGender, bAge, 100);
return 0;

}

但如果在确认系统中,我说我想做一个新的,goto功能会起作用,但询问名字不会起作用,它会立即转到询问姓氏最后,当它询问我是否对属性满意时,名字将为空。

我建议使用循环进行纠错和功能延续:

bool continue_program = true;
while (continue_program)
{
//...
std::cout << "Continue program (Y/N)?";
char response;
std::cin >> response;
response = tolower(response);
if (response != 'y') continue_program = false;
}

您也可以使用do-while进行纠错:

int value = 25;
do
{
std::cout << "Enter the number 5: ";
std::cin >> value;
} while (value != 5);

这应该会消除很多gotos。

我已经解决了问题——我已经摆脱了后藤的问题,但这不是问题所在。我把YesNo作为一个字符串,然后把Error correction作为一个do while循环,最后我不得不在代码中使用getline输入YesNo两次,但它在运行时只问了一次。我仍然不知道问题是什么,但我已经解决了。

最新更新