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个不知道意图是什么,这是我的结果图
[解决办法]
每行7个数,你却只读取了4个数,而且也没有处理换行符,这样当然会对不齐;建议你一行一行的读取,读取一行之后,再用fscanf去取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;
}