fscanf函数读取多行多列数据文件

shdtm 2012-11-02 12:20:48
现在有这样一个数据文件,想用fscanf函数读取,每列作为一个数组,我自己写了个代码,运行错误,希望高手们帮我看看吧,多谢了!


1.000000e+000 2.000000e+000 -3.000000e+000
2.000000e+000 3.000000e+000 -2.000000e+000
3.000000e+000 4.000000e+000 -1.000000e+000
4.000000e+000 5.000000e+000 0.000000e+000
5.000000e+000 6.000000e+000 1.000000e+000
6.000000e+000 7.000000e+000 2.000000e+000
7.000000e+000 8.000000e+000 3.000000e+000
8.000000e+000 9.000000e+000 4.000000e+000
9.000000e+000 1.000000e+001 5.000000e+000
1.000000e+001 1.100000e+001 6.000000e+000


我写的代码如下:

# include <iostream>

int main(void){
FILE *fq;
double x[10], y[10], z[10];

fq=fopen("step.dat" ,"r+");
for (int i=1; i<=10; i++){
fscanf(fq,"%e %e %e\n",x[i], y[i], z[i]);
}
fclose(fq);
return 0;
}


...全文
2521 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
koma0529 2015-06-03
  • 打赏
  • 举报
回复
引用 1 楼 ForestDB 的回复:
数组下标从0开始。 fscanf的时候"%e%e%e"即可,中间不需要加空格。
fscanf(%e%e%e)的话貌似只能读到第一个数,中间加逗号的吧
shdtm 2012-11-04
  • 打赏
  • 举报
回复
引用 1 楼 ForestDB 的回复:
数组下标从0开始。 fscanf的时候"%e%e%e"即可,中间不需要加空格。
我又试了一下,稍微改了下程序: # include <iostream> int main(void){ FILE *fp, *fq, *fo; double a=1.2, b=2.3, c=3.5; double x[10], y[10], z[10]; fp=fopen("step 1.dat" ,"w"); for (int i=0; i<10; i++){ fprintf(fp,"%10.3f%10.3f%10.3f\n",a,b,c); a++; b++; c++; } fclose(fp); fq=fopen("step 1.dat" ,"r"); fo=fopen("step 2.dat" ,"w"); for (int i=0; i<10; i++){ fscanf(fq,"%10.3f%10.3f%10.3f\n",&x[i],&y[i],&z[i]); fprintf(fo,"%10.3f%10.3f%10.3f\n",x[i],y[i],z[i]); } fclose(fq); fclose(fo); return 0; } 照理说step1和step2两个文件的内容应该一样啊,为什么step1是正常的,step2不对呢,数字很大。 我在想是不是fscanf用错了,还是数组用法不对呢?
shdtm 2012-11-04
  • 打赏
  • 举报
回复
谢谢你的回复。 好像还是不行,我在想一行三个数,数与数之间怎么区分呢
引用 1 楼 ForestDB 的回复:
数组下标从0开始。 fscanf的时候"%e%e%e"即可,中间不需要加空格。
Prairial_0 2012-11-04
  • 打赏
  • 举报
回复
引用 5 楼 shdtm 的回复:
引用 4 楼 Prairial_0 的回复:double对应的是scanf("%lf", ...) printf倒都是%f 哈哈,貌似可以了呢,太感谢你了! 我想问一下为什么scanf("%lf", ...)可以,而scanf("%10.3lf", ...)这样就不对呢 还有这个“&”是作什么用的啊
取地址,不给地址scanf不知道把读到的东西写到拿去
shdtm 2012-11-04
  • 打赏
  • 举报
回复
引用 4 楼 Prairial_0 的回复:
double对应的是scanf("%lf", ...) printf倒都是%f
哈哈,貌似可以了呢,太感谢你了! 我想问一下为什么scanf("%lf", ...)可以,而scanf("%10.3lf", ...)这样就不对呢 还有这个“&”是作什么用的啊
Prairial_0 2012-11-04
  • 打赏
  • 举报
回复
double对应的是scanf("%lf", ...) printf倒都是%f
ForestDB 2012-11-02
  • 打赏
  • 举报
回复
数组下标从0开始。
fscanf的时候"%e%e%e"即可,中间不需要加空格。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧