提示用户时,文件中的数据无法正确显示

时间:2013-06-27 09:43:24

标签: c++ console return

我正在关注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的答案。我真的不明白,但希望有人可以帮助我。 这是一个完全无用的程序,但我想理解这些不正常运行的原因并从中学习。

1 个答案:

答案 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;
}