首页 > 解决方案 > 有没有办法从文本文件中读取并将单个数据存储为不同的变量?

问题描述

我正在开发这个程序:

创建一个模拟 ATM 机的程序。您必须创建一个名为“ATM”的类,该类将具有以下成员函数:

  1. 在屏幕上创建问候语,

  2. 向用户询问一个四位数的密码,

    a) 名为“pin”的外部文件必须包含以下四个 pin 以及所有者名称和余额:

    拉里 1234 200 美元

    萌5678 $350

    露西 0007 $600

    雪莉 9876 535 美元

    b) 用户输入的 pin 必须与存储的 pin 之一匹配以允许访问事务。

    c) 3次尝试不成功后,告知用户账号被冻结,必须联系客服。

  3. 成功输入密码后,用他们的名字问候用户。

  4. 创建一个屏幕,询问用户是否要取款或存款或查看余额。

  5. 初始化 $500 的初始机器余额。根据存款和取款跟踪余额。

  6. 不允许用户提取比机器中当前更多的钱。

  7. 将提取的金额限制为 400 美元。

  8. 程序必须在一个连续循环上运行。

我不知道如何做 2b 和 3。我认为我应该为 4 个不同的人创建 4 个不同的对象,每个对象 1 行,然后在对象中分离名称、引脚和平衡,但我不太清楚确定该怎么做。

我想我应该getline()在循环中使用类似的东西将线条分成 4 个对象,然后fin >> name >> pin >> balance;用来区分namepinbalance,但我无法弄清楚。

如果我做错了,那么我真的很感激朝着正确的方向轻推。

标签: c++

解决方案


如果您正在从输入流中读取,您基本上可以这样做:

struct User {
    std::string name;
    int pin;
    int amnt;
};
User read_user(std::istream& stream) {
    User user;
    // Reads in the username (this assumes the username doesn't contain a space)
    stream >> user.name; 
    // Reads in the pin as an integer
    stream >> user.pin;
    stream.ignore(2); //Ignore the extra space and dollar sign
    // Reads in the dollar amount as an integer
    stream >> user.amnt; 
    // Returns the user
    return user;
}

这将允许您从文件流中读取std::cin或从文件流中读取,并将返回用户名、密码和数量。

我们可以像这样读取多个用户。基本上,我们只是read多次调用。

std::vector<User> read_users(std::istream& stream, int n) {
    std::vector<User> users; 
    for(int i = 0; i < n; i++) {
        users.push_back(read_user(stream)); 
    }
    return users; 
}

这将读取尽可能多的用户。

读入文件中的所有用户

我们还可以读入一个文件中的所有用户。

std::vector<User> read_all_users(std::istream& stream) {
    std::vector<User> users; 
    while(true) // Checks that there's stuff left in the stream
    {
        User u = read_user(stream); // Try reading a user
        if(not stream) break; // If there was nothing left to read, exit
        users.push_back(u); 
    }
    return users; 
}

示例用法:

我们将打开一个名为 的文件users.txt,并将它们全部读入。然后,我们将打印出每个用户的姓名、密码和帐户余额。

int main() {
    std::ifstream user_file("users.txt"); 
    std::vector<User> users = read_all_users(user_file); 

    // This prints out the name, pin, and balance of each user
    for(User& user : users) {
        std::cout << "Name: " << user.name << '\n';
        std::cout << "Pin: " << user.pin << '\n';
        std::cout << "Amnt: " << user.amnt << '\n';
    }
    // Do stuff with the list of users
}

推荐阅读