首页
社区
课程
招聘
未解决 [求助]C++读写csv文件报错,哪里不对啊
2021-1-20 11:28 2430

未解决 [求助]C++读写csv文件报错,哪里不对啊

2021-1-20 11:28
2430
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
 
class csvdata{
public:
     int id;
     int level;
     float price;
     float cost;
      };//行的类定义

int main()
{
     vector<csvdata> incsv;
     csvdata intp;
     FILE *fp;
     fp=fopen("price.csv","r");
     if( fp == NULL)
    {
        cout << "price.csv is not exsit!\n";
        exit(1);
    }
     
     while(1){
         fscanf(fp,"%d,%d,%f,%f",&intp.id,&intp.level,&intp.price,&intp.cost);
         incsv.push_back(intp);
         if (feof(fp)) break;
     }
     fclose(fp);
     for(int i=0;i<incsv.size();i++)
     {
         cout<<incsv[i].id<<" "<<incsv[i].level<<" "<<incsv[i].price<<" "<<incsv[i].cost<<endl;
         
     }//输出显示每行的数据
//system("pause");
//fclose(fp);
return 0;

}


打开的文件在附件上,帮忙看一下,哪里错了?


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
打赏
分享
最新回复 (8)
雪    币: 256
活跃值: (382)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
十年后不是你 2021-1-20 12:01
2
0
csvdata intp; 这个没初始化  乱码了吧


雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
limee 2021-1-20 12:14
3
0
int main()
{
     vector<csvdata> incsv;
     csvdata intp;
     FILE *fp;
     fp=fopen("price.csv","r");
     if( fp == NULL)
    {
        cout << "price.csv is not exsit!\n";
        exit(1);
    }
     
     while(1){
           fscanf(fp,"%d,%d,%f,%f",&intp.id,&intp.level,&intp.price,&intp.cost);
           incsv.push_back(intp);
           if (feof(fp)) break;
   //  }//
//     fclose(fp);
     for(int i=0;i<incsv.size();i++)
     {
              cout <<"Running!!!" << "\n";
         cout<<incsv[i].id<<" "<<incsv[i].level<<" "<<incsv[i].price<<" "<<incsv[i].cost<<endl;
         
     }  // 输出显示每行的数据
//system("pause");
}
fclose(fp);
return 0;
}

我代码改成上面,打印出来的是地址。初始化的地方应该如何修改?
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
limee 2021-1-20 12:21
4
0
十年后不是你 csvdata intp; 这个没初始化  乱码了吧

能把关键的错误改一下吗?谢谢!


fscanf(fp,"%d,%d,%f,%f",&intp.id,&intp.level,&intp.price,&intp.cost);


好像是这句话写的有问题,但我不知道如何修改?

最后于 2021-1-20 12:23 被limee编辑 ,原因:
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
limee 2021-1-20 12:58
5
0
limee 十年后不是你 csvdata intp; 这个没初始化 &nbsp;乱码了吧 能把关键的错误改一下吗?谢谢!fscanf(fp,&quot;%d ...

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;

int main()
{
     int id;
     int level;
     float price;
     float cost;

     FILE *fp;
     fp=fopen("price.csv","r");
     if( fp == NULL)
    {
        cout << "price.csv is not exsit!\n";
        exit(1);
    }
     
     while(!feof(fp)) {
       fscanf(fp,"%d,%d,%f,%f",&id,&level,&price,&cost);
       cout<<id<<" "<<level<<" "<<price<<" "<<cost<<endl;
     }//while
fclose(fp);
return 0;
}

我把类给取消了,然后为啥文件指针不往下走,程序死循环了。

打印输出的数据也不是我想要的。

最后于 2021-1-20 12:59 被limee编辑 ,原因:
雪    币: 3898
活跃值: (3923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Mxixihaha 2021-1-20 13:34
6
0

直接在你代码的位置加入把首行排除就行了 , 因为你的首行并不能用 %d 来格式化

	//因为你文件里面的第一行并不是 %d,%d,%f,%f 的格式. 让他跳下一行

	char tempHead[256]={0};
	fgets(tempHead ,sizeof(tempHead), fp);
       //从下一行开始scanf就正确了.
       
     while(1){
         fscanf(fp,"%d,%d,%f,%f",&intp.id,&intp.level,&intp.price,&intp.cost);
         incsv.push_back(intp);
         if (feof(fp)) break;
     }


雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
limee 2021-1-20 13:37
7
0
Mxixihaha 直接在你代码的位置加入把首行排除就行了 , 因为你的首行并不能用 %d 来格式化 //因为你文件里面的第一行并不是&nbsp;%d,%d,%f,%f&nbsp;的格式.&nbs ...
谢谢,果然是这个问题。
雪    币: 256
活跃值: (382)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
十年后不是你 2021-1-24 19:20
8
0
雪    币: 453
活跃值: (129)
能力值: (RANK:0 )
在线值:
发帖
回帖
粉丝
同志们好啊 2021-1-27 19:57
9
0
你这是c++吗?
分明是c.
c++和c天壤之别.
学c++,就不要用c那一套.
游客
登录 | 注册 方可回帖
返回