0

我正在关注 TheNewBoston 关于 C++ 的一些教程,我已经到了第 70 篇教程并结束了,但我遇到了第一个真正的问题。我不得不为教程创建一个虚假的“items.txt”文件,假装这些是游戏的项目。从那里,用户将输入他们是否想要返回有害物品(负整数)、正常物品(返回 0)或有用物品(正整数),假设游戏中的这些物品会对玩家的健康产生影响。

我的问题是它并不总是返回正/中性/负整数列表。有时它会返回它们,有时它只会设置值并停止使用它们。我不明白,因为我检查了我的代码,一切似乎都很好。

这是我的整个代码:

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 之类的答案。我不太明白,但希望这里有人可以帮助我。这是一个完全没用的程序,但我想了解它无法正常运行的原因并从中学习。

4

1 回答 1

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;
}
于 2013-06-27T11:16:56.480 回答