C ++读取CSV到载体,函数getline()的问题

问题描述 投票:1回答:1

我的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;
};

对于第一个数据,字符串名称指帕尔默香,很长很长是指1.66805E + 12,INT PWD是perfer 7500和双平衡是指3020。

这是我的main.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只是显示前世界第一。因为这是分配request.How读取long long类型与变量,字符和符号,我不能改变accountNum的类型?

c++ csv vector getline long-long
1个回答
2
投票

在文件中的账户号码存储为1.66805E+12。这是一个浮点数,不是一个整数。当您使用stoi将其转换为一个它解析字符串,并在.停止,因为这不是一个整数的有效标志。这意味着stoi是否会返回1所有帐号的。您可以通过使用1.66805E+12第一转换doublestod解决这个问题,然后你就可以说double储存像整数

getline(iss, token, ',');
Client.accountNum = std::stod(token);
© www.soinside.com 2019 - 2024. All rights reserved.