c++读取文本文件

来源:百度知道 编辑:UC知道 时间:2024/07/09 07:55:33
#include <stdio.h>
#include <iostream.h>
#include <iomanip.h>
#include <malloc.h>
#define N 100
typedef struct data
{
double xdata;
double ydata;
int elevent;
int num;
}all;
all A[N];
void main()
{
FILE *fp;
int i=0;
int k=0;
int n=0;
fp=fopen("data.txt","r");
if (fp==NULL) cout<<"error!";
while (!feof(fp))
{
fscanf(fp,"%f%f%d%d",&A[1].xdata,&A[1].ydata,&A[1].elevent,&A[1].num);
n++;
if (A[1].num==31) {i++;free(A);}
if (A[1].num==32) {k++;free(A);}
if (A[1].num==33)
{
cout<<i<<" "<<A[1].elevent<<" "<<n-k<<" "<<k<<endl;
k=0;
free(A);
}
fclose(fp);
}

}
数据文件存在,编译连接都没错,运行时候有错了

运行时没有反应啊
5641

首先双精度的读取应该用"lf",而且VC有一个BUG,读取float和double需要在之前进行一次float或双精度的运算;第二,数组A这样的申请的空间不需要用free释放;第三,fclose(fp)应该放在循环的外面;下面帮你稍微改了一下,你看看吧
#include <stdio.h>
#include <iostream.h>
#include <iomanip.h>
#include <malloc.h>
#define N 100
typedef struct data
{
double xdata;
double ydata;
int elevent;
int num;
}all;
all A[N];
void main()
{
FILE *fp;
int i=0;
int k=0;
int n=0;
double di;
di = 1.1;
fp=fopen("data.txt","r");
if (fp==NULL) cout<<"error!";
while (!feof(fp))
{
fscanf(fp,"%lf%lf%d%d",&(A[1].xdata),&(A[1].ydata),&(A[1].elevent),&(A[1].num));
n++;
if (A[1].num==31) {
i++;
// free(A);
}
if (A[1].num==32) {
k++;
// free(A);
}
if (A[1].num==33)
{
cout<<