c++ - 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;
};
第一个数据,String name 参考Palmer Shannon,long long 参考1.66805E+12,int pwd参考7500,double balance 参考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 类型?
解决方案
您文件中的帐号存储为1.66805E+12
. 这是一个浮点数,而不是整数。当您用于stoi
将其转换为时,它会解析字符串并停在 the 处,.
因为它不是整数中的有效符号。这意味着stoi
将返回1
所有帐号。您可以通过首先转换1.66805E+12
为double
using来解决此问题stod
,然后您可以将其存储double
为整数,例如
getline(iss, token, ',');
Client.accountNum = std::stod(token);
推荐阅读
- java - 有没有办法在不切换的情况下获取浏览器的所有标签标题?
- firebase - Firebase Flutter - 如何从 Firebase 的文档中检索 2 个字段到我的移动应用程序?
- python - ImportError:模块“pythoncom”不在冻结的 sys.path 中
- python - 是否有 VCP 命令可以禁用诸如“进入睡眠模式”之类的消息?
- c++ - OpenGL:添加镜面光照时网格变黑
- python - “本地主机拒绝连接” - Jupyter Lab/notebook
- python - Python 和 Google Colab 中的 statsmodels.tsa.arima_model 与 arima.model
- swift - 如何在macOS中正确排列多个屏幕的坐标?
- python - 使用 pyinstaller 制作的控制台应用程序立即关闭
- c# - 除非定义了新的侦听器或管道,否则不会在 EventListener 中使用 Dotnet EventCounter