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

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

2021-1-20 11:28
2669
#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;

}


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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 256
活跃值: (387)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
csvdata intp; 这个没初始化  乱码了吧


2021-1-20 12:01
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
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;
}

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

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


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


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

最后于 2021-1-20 12:23 被limee编辑 ,原因:
2021-1-20 12:21
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
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编辑 ,原因:
2021-1-20 12:58
0
雪    币: 5299
活跃值: (5340)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6

直接在你代码的位置加入把首行排除就行了 , 因为你的首行并不能用 %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;
     }


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