想用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是想每读一个数放入到数组中存起来。 展开
-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是想每读一个数放入到数组中存起来。 展开
2个回答
展开全部
画蛇添足一下,还没调好
#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
}
#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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序的问题:
1. 用fscanf 没有考虑文件结束的问题(程序循环了100次,文件中是不是有100组数据?);
2. 定义的 char (一字节)类型的数组, 在读取数据时用的 %d (int类型(2或4字节)), 文件中的数据是 float类型,类型不一置:这样一是读出来的数据会丢失(后读的覆盖先读的,读取的数据小数点后丢失),再有就是存在内存越界(s只有100字节,fscanf 可能会向100字节外的空间写入数据),造成程序中断。
解决:把 char s[100]; 数据类型改成浮点型,相应的 fscanf 和printf 做相应修改。
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]);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询