【问题标题】:Read text file into class variable - c++将文本文件读入类变量 - C++
【发布时间】:2018-05-24 14:20:27
【问题描述】:

所以...我尝试制作一个从 .txt 文件中读取玩家帐户余额的游戏内商店系统,但我遇到了这个非常奇怪的问题

所以。这个 int 工作得很好。它从文件中读取数据,将字符串转换为数值,然后打印出来。

int main() {
    int money;
    string cash;

    ifstream playerdata;
    playerdata.open("player.txt");
    if (playerdata.is_open()) {
    getline(playerdata,cash);
    money = atoi(cash.c_str());
    } else cout<<"error";
    return money;
}

虽然这个没有。它总是打印出现金等于 0。

class Player {
    int money ;
    string cash;
    public:
        GetMoney();
        int PrintMoney() {return atoi(cash.c_str());};

};

Player::GetMoney(){
    int money;
    string cash;

    ifstream playerdata;
    playerdata.open("player.txt");
    if (playerdata.is_open()) {
    getline(playerdata,cash);
    money = atoi(cash.c_str());
    playerdata.close();
    } else cout<<"error";
}

int main() {

    Player a;
    cout<<"Your Money: "<<a.PrintMoney()<<"$";  
};

【问题讨论】:

  • 你有两个变量叫做cash——你只想要一个;成员变量。
  • 仍在打印同样的东西。

标签: c++ class fstream getline atoi


【解决方案1】:

你在main的逻辑如下:

  • 创建a 类型的Player
  • a 上调用PrintMoney() 函数。

您对PrintMoney 函数的实现不会调用GetMoney 函数。在这种情况下,cash 是一个空字符串。在这个空字符串上调用c_str 将导致一个空值被传递给atoi,这将返回一个0。

根据域,这似乎是正确的。玩家还没有钱。也许在声明a 之后,您需要调用a.GetMoney(),但是您的代码存在其他问题,这意味着这将无法正常工作。

GetMoney 函数中的moneycash 变量将覆盖 Player 类中的变量。你应该删除这些。

【讨论】:

  • 谢谢。解决了。所有问题都是因为GetMoneynot beeeing 被调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
相关资源
最近更新 更多