想用C++读取一个.csv文件,文件里面的数据只有一行,没有空格,每个数据都用逗号隔开 50

想用C++读取一个.csv文件,文件里面的数据只有一行,没有空格,每个数据都用逗号隔开,像这样:-35.638,-36.245,-36.851,-37.458,-38.0... 想用C++读取一个.csv文件,文件里面的数据只有一行,没有空格,每个数据都用逗号隔开,像这样:
-35.638,-36.245,-36.851,-37.458,-38.064,-38.67,-39.276,-39.882,-40.487,-41.092,-41.697,-42.301,-42.905,-43.509
我自己写了个读取的程序,编译通过了,但是运行会出现中断,不知道为什么,望大神帮忙!
代码如下:
#include <stdio.h>
FILE *fin;
char s[100];
int main(){
int i=0;
fin=fopen("D:\XXXB-6-01.csv","r"); // 打开文件
while(1) {
for (i=0;i<100;i++){
fscanf(fin,"%d,",s[i]);
printf("%f",s[i]);
}
}
fclose(fin);
}
报的错是中的 0x0ffb4ada 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突,不知道是什么问题,是写入错误么?难道我的数组定义的有错误?
我补充一下,我用for是想每读一个数放入到数组中存起来。
展开
 我来答
ljupcn
2014-11-20 · TA获得超过1688个赞
知道小有建树答主
回答量:872
采纳率:0%
帮助的人:969万
展开全部
画蛇添足一下,还没调好

#include <stdio.h>
FILE *fin;
float s[100];//float型
int main()
{
int i=0;
fin=fopen("D:\\XXXB-6-01.csv","r"); //路径中应该两个反斜杠
//while(1) //for循环就够了,while会无限循环
//{
for (i=0;i<100;i++)
{
fscanf(fin,"%f",&s[i]); //f后面逗号
printf("%f ",s[i]);
}
//}
fclose(fin);
return 0;//既然用了int main,加return
}
追问
按照你说的试了下,不行,是fscanf这里出错,我找到一个方法是fscanf(fin,"%s,",s);,s是定义的char型的,好像可以。
追答
更正一下,我上面的代码疏漏了一下
fscanf(fin,"%f",&s[i]); //f后面逗号
后面的逗号应该保留的。我测试一下,我这是能够读入文件内容。
这样文件中的内容会全部读入,不够100个会添加为0。
无论是按浮点数或者字符数组都可以,关键的一点,fscanf的第三个参数为地址,而像你那样,第三个参数直接为s,因为s字符数组的数组名代表其首地址,所以函数接受这个参数并正确读取,而以字符数组读取,就是s[i]这样,则需要通过&s[i]来取地址。
#include
FILE *fin;
float s[100];
int main()
{
int i=0;
fin=fopen("D:\\XXXB-6-01.csv","r");
for (i=0;i<100;i++)
{
fscanf(fin,"%f,",&s[i]);
printf("%f ",s[i]);
}
fclose(fin);
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bignode
2014-11-20 · TA获得超过2664个赞
知道大有可为答主
回答量:1427
采纳率:75%
帮助的人:548万
展开全部
程序的问题:
1. 用fscanf 没有考虑文件结束的问题(程序循环了100次,文件中是不是有100组数据?);
2. 定义的 char (一字节)类型的数组, 在读取数据时用的 %d (int类型(2或4字节)), 文件中的数据是 float类型,类型不一置:这样一是读出来的数据会丢失(后读的覆盖先读的,读取的数据小数点后丢失),再有就是存在内存越界(s只有100字节,fscanf 可能会向100字节外的空间写入数据),造成程序中断。

解决:把 char s[100]; 数据类型改成浮点型,相应的 fscanf 和printf 做相应修改。
追问
fscanf我本来是想一个一个数据读取的,现在发现可以直接全部读取了。
另外,如果我改成float s[100],相应的fscanf和printf是不是得改成
fscanf(fin,"%f,",s);
printf("%f",s);
但是这样读出来的数据时0.000000……
追答
fscanf(fin,"%f,",&s[i]);

printf("%f",s[i]);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式