首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

fscanf函数读取文本数据老是出错

2014-01-09 
fscanf函数读取文本数据总是出错文本数据可以读出来,但顺序总是乱的,比如我的数据是0.632919 2.843643 1.0

fscanf函数读取文本数据总是出错
文本数据可以读出来,但顺序总是乱的,比如我的数据是
0.632919 2.843643 1.025223 55 17 11 9
0.636337 2.841873 1.024307 20 14 9 6
0.635269 2.842697 1.023605 24 15 10 7
0.635330 2.842911 1.024857 52 15 10 7
0.632919 2.843643 1.025223 55 17 11 9
0.636337 2.841873 1.024307 20 14 9 6
0.632919 2.843643 1.025223 55 17 11 9
0.635330 2.842911 1.024857 52 15 10 7

读出来就变成了
0.632919 2.843643 55 55
0.636337 2.841873 52 20
0.635269 2.842697 1.023605 24
0.635330 2.842911 1.024857 52
0.632919 2.843643 1.025223 55
0.636337 2.841873 1.024307 20
0.632919 2.843643 1.025223 55
0.635330 2.842911 1.024857 52
六行数据则不会出错,行数越多则顺序越乱……
这是我的源代码:
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include"windows.h"
FILE *fp;
int main()
{
int i = 0, j = 0;
float x1[100000], y1[100000], z1[100000], fsl1[100000];
errno_t zhizhen;
zhizhen = fopen_s(&fp, "F:\\001.txt", "r");
if (zhizhen != 0)
printf("文件不能打开\n");
for (; fgetc(fp) != EOF; i++)
        fscanf_s(fp, "%f%f%f%f", &x1[i], &y1[i], &z1[i], &fsl1[i]);
        for (; j <i; j++)
printf("%f %f %f %f\n", x1[j], y1[j], z1[j], fsl1[j]);
getchar();

}
求教各位大大这是怎么回事啊
会不会是你栈溢出了,你四个float数组用掉了1.6M,虽然貌似还不算太大,但我也不清楚你的栈到底有多大。。。
[解决办法]
我的电脑上是栈溢出了,于是把数组大小换成了100。
然后没什么问题啊,你的文件一行有7个数,你每次只读4个不知道意图是什么,这是我的结果图
fscanf函数读取文本数据老是出错
[解决办法]
每行7个数,你却只读取了4个数,而且也没有处理换行符,这样当然会对不齐;建议你一行一行的读取,读取一行之后,再用fscanf去取4个数出来。

引用:
文本数据可以读出来,但顺序总是乱的,比如我的数据是
0.632919 2.843643 1.025223 55 17 11 9
0.636337 2.841873 1.024307 20 14 9 6
0.635269 2.842697 1.023605 24 15 10 7
0.635330 2.842911 1.024857 52 15 10 7
0.632919 2.843643 1.025223 55 17 11 9
0.636337 2.841873 1.024307 20 14 9 6
0.632919 2.843643 1.025223 55 17 11 9
0.635330 2.842911 1.024857 52 15 10 7

读出来就变成了
0.632919 2.843643 55 55
0.636337 2.841873 52 20
0.635269 2.842697 1.023605 24
0.635330 2.842911 1.024857 52
0.632919 2.843643 1.025223 55
0.636337 2.841873 1.024307 20
0.632919 2.843643 1.025223 55
0.635330 2.842911 1.024857 52
六行数据则不会出错,行数越多则顺序越乱……
这是我的源代码:
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include"windows.h"
FILE *fp;
int main()
{
int i = 0, j = 0;
float x1[100000], y1[100000], z1[100000], fsl1[100000];
errno_t zhizhen;
zhizhen = fopen_s(&fp, "F:\\001.txt", "r");
if (zhizhen != 0)
printf("文件不能打开\n");
for (; fgetc(fp) != EOF; i++)
        fscanf_s(fp, "%f%f%f%f", &x1[i], &y1[i], &z1[i], &fsl1[i]);
        for (; j <i; j++)
printf("%f %f %f %f\n", x1[j], y1[j], z1[j], fsl1[j]);
getchar();

}
求教各位大大这是怎么回事啊

[解决办法]
楼上正解,如果是读前4个数那就是这样
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *fp;

int main()
{
int i = 0, j = 0;


float x1[100], y1[100], z1[100], fsl1[100];
errno_t zhizhen;
char buf[256];
 zhizhen = fopen_s(&fp, "F:\\001.txt", "r");
if (zhizhen != 0)
{
printf_s("不能打开文件!\n");
}

for (; fgetc(fp) != EOF; i++)
{
fgets(buf, 256, fp);
sscanf_s(buf, "%f%f%f%f", &x1[i], &y1[i], &z1[i], &fsl1[i]);
}
for (; j <i; j++)
printf_s("%f %f %f %.0f\n", x1[j], y1[j], z1[j], fsl1[j]);

if (fp)
{
fclose(fp);
}

return 0;
}


fscanf函数读取文本数据老是出错
[解决办法]
0.632919 2.843643 1.025223 55 17 11 9
fscanf_s(fp, "%f%f%f%f%*d%*d%*d", &x1[i], &y1[i], &z1[i], &fsl1[i]);

一个说明符读一个数字,四个%f就读到55,17...还在没读,下次就从17读起,又读四个;
计算机没你聪明,不会自动把17 11 9就略过从第二行开始读四个float

上面的红色代码,就是用来读17 11 9并丢弃,这样下次循环就是从第二行开始读了

[解决办法]
http://bbs.csdn.net/topics/390471779

热点排行