有没有一种方法可以从文本文件读取并将单个数据存储为不同的变量?

时间:2019-05-08 22:16:22

标签: c++

我正在研究这个程序:

  

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

     
      
  1. 在屏幕上创建问候语

  2.   
  3. 询问用户四位数的密码,

         

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

         

    拉里1234 $ 200

         

    Moe 5678 $ 350

         

    露西0007 $ 600

         

    Shirley 9876 $ 535

         

    b)用户输入的密码必须与存储的密码之一匹配,以允许进行交易。

         

    c)3次失败尝试后,告诉用户其帐户已冻结,必须与客户服务联系。

  4.   
  5. 成功输入图钉后,使用其名称向用户问好。

  6.   
  7. 创建一个屏幕,询问用户是否要提取或存钱或查看其余额。

  8.   
  9. 初始化$ 500的初始机器余额。根据存款和提款跟踪余额。

  10.   
  11. 不允许用户提取比目前机器中更多的钱。

  12.   
  13. 将提取的金额限制为$ 400。

  14.   
  15. 程序必须在连续循环中运行。

  16.   

我不知道该怎么做2b和3。我认为我应该为4个不同的人创建4个不同的对象,每个对象1行,然后在对象内分离名称,固定和平衡,但是我我不太确定该怎么做。

我认为我应该在循环中使用类似getline()的东西将行分成4个对象,然后使用fin >> name >> pin >> balance;来区分namepin和{ {1}},但我无法弄清楚。

如果我做错了一切,那么我将不胜感激朝着正确方向前进。

1 个答案:

答案 0 :(得分:1)

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

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
}