C++ 如何正确读取.csv文件?

C++ 如何正确读取.csv文件?,c++,csv,C++,Csv,我的代码内存有问题,我发现我的代码读错了。例如,最后一个值是添加数字,但不确定原因。而且名字也不正确 这就是输出的样子: 4101,BRAEBURN02.07682e-3172.07691e-317 4021,DELICIOUS02.07682e-3172.07691e-317 4020,DELICIOUS02.07682e-3172.07691e-317 4015,DELICIOUS02.07682e-3172.07691e-317 4016,DELICIOUS02.07682e-3172.0

我的代码内存有问题,我发现我的代码读错了。例如,最后一个值是添加数字,但不确定原因。而且名字也不正确

这就是输出的样子:

4101,BRAEBURN02.07682e-3172.07691e-317
4021,DELICIOUS02.07682e-3172.07691e-317
4020,DELICIOUS02.07682e-3172.07691e-317
4015,DELICIOUS02.07682e-3172.07691e-317
4016,DELICIOUS02.07682e-3172.07691e-317
4167,DELICIOUS02.07682e-3172.07691e-317
4124,EMPIRE,1,1.14,145.202.07682e-3172.07691e-317
4129,FUJI02.07682e-3172.07691e-317
4131,FUJI02.07682e-3172.07691e-317
正如你们所看到的,除了最后一个值,帝国被正确地分开了

这是我的代码:cout部分只是供我个人使用,以查看输入的值是否正确

int main()
{
    string name;
    double price;
    int by_weight;
    double inventory;
    int plu_code;
    ifstream infile;
    infile.open("inventory.csv"); 

    while(!infile.eof())
    {    
        stringstream ss;
        string line = "";
        getline(infile,line);

        Tokenizer tok(line, ",");
        ss << line;

        ss >> plu_code >> name >> by_weight >> price >>inventory;
        cout << plu_code<<"" <<name<<"" << by_weight<<"" << price <<""<<inventory<<"\n";
        table[plu_code] = new Product(plu_code, name,by_weight, price,inventory);
        numProducts++;
    }

    return 0;
}
intmain()
{
字符串名;
双倍价格;
按重量计算的整数;
双重库存;
int plu_码;
河流充填;
填充打开(“inventory.csv”);
而(!infle.eof())
{    
细流ss;
字符串行=”;
getline(填充,行);
标记器tok(行“,”);
ss>编码>>名称>>按重量>>价格>>存货;

coutEmpire
行之所以有效,是因为它是唯一一个名称不包含空格的行。当您从流中读取字符串时,它们由空格分隔,因此您只获取第一个单词。如果之后有更多单词,则读取
双精度
或其他数字类型将失败,因为流仍然指向在非数字字符处。您没有测试您的输入操作是否成功,但从您的输出中应该可以明显看出这一点


我不确定您的
Tokeniser
类在这里应该有什么影响。但也许可以看看如何将逗号标记出流。您可以使用带有逗号分隔符的单个
getline
调用来读取名称,然后使用普通
从您的数据示例中不清楚它与您创建的表的关系ted。你能把数据编辑成更可读的形式吗?数据样本和数据表不一样。例如,美味的类型不同。数据样本中有奇怪的科学符号数字,可能是机器的最小浮点值。它不是对应于它下面的表的CSV格式数据。你能提供m吗我知道这就是我的计算机输出的数据,它是在单词的空格处结束数据,并将我的a最后一个值转换为某种类型的浮点。数据示例的目的是显示我的输出是如何输出的,可能是OK的重复,那么为什么Empire的最后一个值仍然是浮点,而不是它是如何输出的呢是given@user2644360没有。名称读入时为
,EMPIRE,1,1.14145.2
,其余值与其他情况下的未初始化值相同。由于字段之间没有输出任何内容,因此很难看到发生了什么。请尝试在中间输出一个类似
#
的字符,这样您将ee.目前您正在使用的是一个空字符串
。一旦您看到了这一点,您就可以尝试接受我在回答中给您的建议。