C++将csv读取到向量中,getline()问题



我的csv文件数据如下所示:

Palmer Shannon,1.66805E+12,7500,3020
Jonas Kelley,1.62912E+12,9068,1496
Jacob Doyle,1.61608E+12,1112,3502
Iola Hayden,1.60603E+12,6826,4194

这是我的头文件:

#ifndef client_h
#define client_h
#include <string>
const int MAX_CLIENT = 20;
struct client {
    std::string name;
    long long  accountNum;
    int pwd;
    double balance;
};

对于第一个数据,字符串名称引用 Palmer Shannon,long long 引用 1.66805E+12,int pwd 引用 7500,双平衡引用 3020

这是我的主文件.cpp我尝试创建一个向量来保存csv文件数据。

string str;
    std::vector<client> readClientProfile;
    while (getline(data, str))
        {
        client Client;
        istringstream iss(str);
        string token;
        getline(iss, Client.name, ',');
        getline(iss, token, ',');
        Client.accountNum = std::stoi(token);

        getline(iss, token, ',');
        Client.pwd = std::stoi(token);
        getline(iss, token, ',');
        Client.balance = std::stoi(token);

        readClientProfile.push_back(Client);
    }
    for (size_t i = 0; i < readClientProfile.size() - 1; i++)
    {
            std::cout << readClientProfile[i].name << "  "<<endl;
            std::cout << readClientProfile[i].accountNum << "  "<<endl;
            std::cout << readClientProfile[i].pwd << "  "<<endl;
            std::cout << readClientProfile[i].balance << "  "<<endl;
        }

问题是当我运行程序时,accountNum 只是显示第一个世界 1。 我无法更改帐户编号的类型,因为这是分配请求。如何读取带有变量、字符和符号的长长类型?

文件中的帐号存储为 1.66805E+12 。 这是一个浮点数,而不是整数。 当您使用 stoi 将其转换为 时,它会解析字符串并在.处停止,因为它不是整数中的有效符号。 这意味着stoi将返回所有帐号的1。 您可以通过首先使用 stod1.66805E+12转换为double来解决此问题,然后将该double存储为整数,例如

getline(iss, token, ',');
Client.accountNum = std::stod(token);

相关内容

  • 没有找到相关文章

最新更新