我的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 。
这是我的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只是显示第一个世界 1 。我不能更改accountNum的类型,因为这是分配请求。如何读取带有变量,字符和符号的long long类型?
答案 0 :(得分:2)
文件中的帐号存储为1.66805E+12
。这是一个浮点数,而不是整数。当您使用stoi
将其转换为a时,它将分析字符串并在.
处停止,因为这不是整数中的有效符号。这意味着stoi
将为所有帐号返回1
。您可以通过以下方法解决此问题:首先使用1.66805E+12
将double
转换为stod
,然后可以将double
作为整数存储,例如
getline(iss, token, ',');
Client.accountNum = std::stod(token);