我正在关注TheNewBoston关于C ++的一些教程 我正在谈论第70个教程和结束,但我遇到了我的第一个真正的问题。我不得不为教程创建一个虚假的“items.txt”文件,假装这些是游戏的项目。从那里,用户将输入是否要返回有害物品(负整数),正常物品(返回0 )或有用物品(正整数< / em>)假设游戏中的这些对象会对玩家的健康产生影响。
我的问题是它并不总是返回正/中/负整数列表。有时它返回它们,有时它只会设置值并停止使用它们。我不明白,因为我检查了我的代码,一切似乎都很好。
这是我的整个代码:
int getWant();
void displayItems(int x);
//main function
int main () {
int whatTheyWant;
whatTheyWant = getWant();
while (getWant() != 4) {
switch(whatTheyWant){
case 1:
displayItems(1);
break;
case 2:
displayItems(2);
break;
case 3:
displayItems(3);
break;
}
}
return 0;
}
//getWant function
int getWant(){
int choice;
cout << "1 - Regular" << endl;
cout << "2 - Helpful" << endl;
cout << "3 - Harmful" << endl;
cout << "4 - Quit Program" << endl;
cin >> choice;
return choice;
}
//display items function
void displayItems(int x)
{
ifstream itemFile("items.txt");
string name;
double power;
switch(x) {
case 1:
while(itemFile >> name >> power) {
if(power == 0){
cout << name << ' ' << power << endl;
}
case 2:
while(itemFile >> name >> power) {
if(power>0) {
cout << name << ' ' << power << endl;
}
}
case 3:
while(itemFile >> name >> power) {
if(power<0)
cout << name << ' ' << power << endl;
}
}
}
}
这是我的文本文件,带有假的“项目”。
Flower 0
ShadowGrunt -20
Tree 0
Light -50
Darkfruit 25
ShadowPlant -10
Water 0
ShadowBat -5
Poison -20
Darkrain 2
TaintedBerries 10
Grass 0
例如,如果用户输入“2”,则应显示所有正项。 所以控制台会显示:
Darkfruit 25 Darkrain 2 TaintedBerries 10
或者如果要输入“3”,控制台应显示:
ShadowGrunt -20 Light -50 ShadowPlant -10 ShadowBat -5 Poison -20
等等。 相反,我会得到像Darkberries,然后可能是ShadowBat或Grass的答案。我真的不明白,但希望有人可以帮助我。 这是一个完全无用的程序,但我想理解这些不正常运行的原因并从中学习。
答案 0 :(得分:1)
您没有将 whatTheyWant 变量设置为getWant()函数的最新读取值。修改主要功能代码,如下所示:
//main function
int main () {
int whatTheyWant;
while ((whatTheyWant=getWant()) != 4) {
switch(whatTheyWant){
case 1:
displayItems(1);
break;
case 2:
displayItems(2);
break;
case 3:
displayItems(3);
break;
}
}
return 0;
}