C++ get/set 在 switch case 中没有得到值
C++ get/set not getting value in switch case
我有 2 classes M
和 L
每个都有自己的 .header
和 .cpp
文件。
在classL
中有get/set个方法
class L // this is in L.h file
{
private:
int A;
float B;
public:
A();
A(int,float);
void setA(int A);
int getA();
void setB(int B);
int getNoOfEarthLikePlanets();
};
//L.cpp//
L::L() // default constructor
{
A = 0;
B = 0;
}
L::L(int aA,float bB) non-default constructor
{
A = aA;
B = bB;
}
void L::setA(int aA) // set A
{
A = aA;
}
int L::getA() // get A
{
return(A);
}
void L::setB(float bB) //set B
{
B = bB;
}
float L::geB() // get B
{
return(B);
}
我的 class M
:
#include "L.h"
void M::mainMenu()
{
int choice = 0;
cout<<" 1) enter your A and B:"endl;
cout<<" 2) Display your An B :"endl;
cin>>choice;
yourChoice(choice);
}
void M::yourChoice(int choice)
{
const int size = 50;
int cinA;
int cinB;
static int count = 0;
L newL[size];
while(choice != 999)
{
switch(choice)
{
case 1:
{
while(count<SIZE)
{
cout<<"What is A : ";
cin>>cinA;
newL[count].setA(cinA);
cout<<"What is B: ";
cin>>cinB;
newL[count].setA(cinA);
++count;
//******i tried to cout my newL[count].getA(); it displays a blank too*********
mainMenu();
cin>>choice;
break;
};
//Even if i bring newL
} // end of case 1
break;
case 2:
{
for(int x = 0;x<size;x++)
{
cout<<newL[x].getA()<<endl; //Prints a blank
}
}//end of case 2
}//end of switch
}//end of while
我在案例 1 中使用 get/set 获取用户输入,并在案例 2 中将其打印出来。但是,当我在案例 1 中输入详细信息后,我转到案例 2,它什么也不显示,甚至没有 0
,只是一片空白。我还尝试将 static 放在我的类型变量前面,因为我认为这可能是调用之间要做的事情。
而且我还尝试 cout
getA()
在案例 1 中输入值后,它也显示空白。我错过了什么?如果您觉得我写的其他代码可能会导致这种情况发生,请索取更多详细代码。这只是一部分。
在我的 int main()
我只是 运行 mainMenu();
forgivenprog33442
我认为没有打印出任何内容,因为您的代码实际上从未进入案例 2,因为您在 ++count
之后立即在 yourChoice 方法中调用 mainMenu()
,意外地进行了递归。只需在 yourChoice 方法中从 choice
变量中删除 mainMenu()
并在 class.
中将 choice
声明为 private
变量
例如,您可以在选择范围内时循环执行此操作
while(choice > 0 && choice < 3)
{
switch(choice)
{
case 1:
while(count < SIZE)
{
//loop until all number are set
//then ask for choice
//make sure you check if space in array
//or use a vector so it can resize automatically
}
case 2:
//print your values
}
}
while(choice != 999)
{
switch(choice)
{
case 1:
{
while(count<SIZE)
{
cout<<"What is A : ";
cin>>cinA;
newL[count].setA(cinA);
cout<<"What is B: ";
cin>>cinB;
newL[count].setA(cinA);
++count;
//******i tried to cout my newL[count].getA(); it displays a blank too*********
YOUR TROUBLE MAKER>>>>>mainMenu();
cin>>choice;
break;
};
//Even if i bring newL
} // end of case 1
break;
case 2:
{
for(int x = 0;x<size;x++)
{
cout<<newL[x].getA()<<endl; //Prints a blank
}
}//end of case 2
}//end of switch
}//end of while
那条麻烦制造者行创建了一个新的 mainMenu 实例,因此,另一组 newL
数组与您在原始 mainMenu
中实例化的原始 newL
无关。由于 mainMenu
本身调用另一个 yourChoice
.
推荐
添加布尔模式只是为了确保您希望在禁用输入的情况下显示主菜单。这样你可以调用mainMenu(true);
如果你想要一个输入和mainMenu(false);
如果你只想要一个显示
void M::mainMenu(boolean mode)
{
cout<<" 1) enter your A and B:"endl;
cout<<" 2) Display your An B :"endl;
if(mode)
{
int choice = 0;
cin >> choice;
yourChoice(choice);
}
}
我有 2 classes M
和 L
每个都有自己的 .header
和 .cpp
文件。
在classL
中有get/set个方法
class L // this is in L.h file
{
private:
int A;
float B;
public:
A();
A(int,float);
void setA(int A);
int getA();
void setB(int B);
int getNoOfEarthLikePlanets();
};
//L.cpp//
L::L() // default constructor
{
A = 0;
B = 0;
}
L::L(int aA,float bB) non-default constructor
{
A = aA;
B = bB;
}
void L::setA(int aA) // set A
{
A = aA;
}
int L::getA() // get A
{
return(A);
}
void L::setB(float bB) //set B
{
B = bB;
}
float L::geB() // get B
{
return(B);
}
我的 class M
:
#include "L.h"
void M::mainMenu()
{
int choice = 0;
cout<<" 1) enter your A and B:"endl;
cout<<" 2) Display your An B :"endl;
cin>>choice;
yourChoice(choice);
}
void M::yourChoice(int choice)
{
const int size = 50;
int cinA;
int cinB;
static int count = 0;
L newL[size];
while(choice != 999)
{
switch(choice)
{
case 1:
{
while(count<SIZE)
{
cout<<"What is A : ";
cin>>cinA;
newL[count].setA(cinA);
cout<<"What is B: ";
cin>>cinB;
newL[count].setA(cinA);
++count;
//******i tried to cout my newL[count].getA(); it displays a blank too*********
mainMenu();
cin>>choice;
break;
};
//Even if i bring newL
} // end of case 1
break;
case 2:
{
for(int x = 0;x<size;x++)
{
cout<<newL[x].getA()<<endl; //Prints a blank
}
}//end of case 2
}//end of switch
}//end of while
我在案例 1 中使用 get/set 获取用户输入,并在案例 2 中将其打印出来。但是,当我在案例 1 中输入详细信息后,我转到案例 2,它什么也不显示,甚至没有 0
,只是一片空白。我还尝试将 static 放在我的类型变量前面,因为我认为这可能是调用之间要做的事情。
而且我还尝试 cout
getA()
在案例 1 中输入值后,它也显示空白。我错过了什么?如果您觉得我写的其他代码可能会导致这种情况发生,请索取更多详细代码。这只是一部分。
在我的 int main()
我只是 运行 mainMenu();
forgivenprog33442
我认为没有打印出任何内容,因为您的代码实际上从未进入案例 2,因为您在 ++count
之后立即在 yourChoice 方法中调用 mainMenu()
,意外地进行了递归。只需在 yourChoice 方法中从 choice
变量中删除 mainMenu()
并在 class.
choice
声明为 private
变量
例如,您可以在选择范围内时循环执行此操作
while(choice > 0 && choice < 3)
{
switch(choice)
{
case 1:
while(count < SIZE)
{
//loop until all number are set
//then ask for choice
//make sure you check if space in array
//or use a vector so it can resize automatically
}
case 2:
//print your values
}
}
while(choice != 999)
{
switch(choice)
{
case 1:
{
while(count<SIZE)
{
cout<<"What is A : ";
cin>>cinA;
newL[count].setA(cinA);
cout<<"What is B: ";
cin>>cinB;
newL[count].setA(cinA);
++count;
//******i tried to cout my newL[count].getA(); it displays a blank too*********
YOUR TROUBLE MAKER>>>>>mainMenu();
cin>>choice;
break;
};
//Even if i bring newL
} // end of case 1
break;
case 2:
{
for(int x = 0;x<size;x++)
{
cout<<newL[x].getA()<<endl; //Prints a blank
}
}//end of case 2
}//end of switch
}//end of while
那条麻烦制造者行创建了一个新的 mainMenu 实例,因此,另一组 newL
数组与您在原始 mainMenu
中实例化的原始 newL
无关。由于 mainMenu
本身调用另一个 yourChoice
.
推荐
添加布尔模式只是为了确保您希望在禁用输入的情况下显示主菜单。这样你可以调用mainMenu(true);
如果你想要一个输入和mainMenu(false);
如果你只想要一个显示
void M::mainMenu(boolean mode)
{
cout<<" 1) enter your A and B:"endl;
cout<<" 2) Display your An B :"endl;
if(mode)
{
int choice = 0;
cin >> choice;
yourChoice(choice);
}
}