应该不难(c语言),我送300分(300分)

  • 主题发起人 主题发起人 flycat
  • 开始时间 开始时间
F

flycat

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个txt文本文件,格式如下:
8000
1000
1175
1425.25
50
0 43.124582 99.785468 5000 2.35648 2.568745 89547545 0000 0
1 483578945 54.265814 5000 2.35648 2.568745 89547545 0000 0
2 50.124582 91.785468 5000 2.35648 2.568745 89547545 0000 0
......
.....
用c语言如何读取每一行数据,并逐个赋给变量?请给出源码。万分感谢!!!!!
每一行都是一组数据,
int float float float float float float 0x int
0 43.124582 99.785468 5000.89 2.35648 2.568745 450.6589 0000 0
每个数读如变量中,输出到屏幕。
补充说明:txt文件行数不定,最多260行。中间空格不定,每行一回车键结束。
难道就没有高手指点
 
还是没说清楚,前5行是否固定只有一个数?第四行是否总是浮点数?
0x可不是数据类型,是否是int?
 
是不难吧~
用readln读出四行放四个变量中。。。
后面也一样读出先放到字符中然后查找空格分别将其放到特定类型中。。
 
前5行是否固定只有一个数!(only one),0x代表16进制。是不难,为什么没有人给出好的答案?
高手请出招!!!!!!!
 
这恐怕不需要高手就可以搞定了, 你先把300分给我, 我就给你搞定
 
这不简单吧。。。干嘛还得麻烦高手出招呢。。。。[:)]
 
体力活:)
 
FILE *Fp;
char RdBuf[256];
long aa[9];
//可以自己定义其它的类型变量。
long Cnt = 0;
if ((Fp = fopen("c://test.txt","r")) == NULL)
{
printf("open file fail/n");
return;
}
while ((!feof(Fp)) &&
(Cnt < 260))
{
if (fgets(RdBuf,256,Fp) == NULL)
{
printf("read error/n");
fclose(Fp);
break;
}
Cnt ++;
if (Cnt < 6)
{
printf("%s/n",RdBuf);
}
else
{
if (sscanf(RdBuf,"%d%f%f%f%f%f%f%f%x%d",&amp;aa[0],&amp;aa[1],&amp;aa[2],&amp;aa[3],&amp;aa[4],&amp;aa[5],&amp;aa[6],&amp;aa[7],&amp;aa[8]) != 9)
{
printf("get error/n");
continue;
}
for (int i = 0;i < 9;i ++)
{
printf("%f/n",aa);
}
}
}
fclose(Fp);
 
在你的前一张帖子中yanghai0437,已给出正确的的做法,
不知你试过没有。我用他(她)的方法再做了一次。
下面是输入与输出数据
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1378205
8000
1000
1175
1425.25
50
0 43.124582 99.785468 5000 2.35648 2.568745 89547545 0000 0
1 483578945 54.265814 5000 2.35648 2.568745 89547545 0000 0
2 50.124582 91.785468 5000 2.35648 2.568745 89547545 0000 0
ready GO....
8000
1000
1175
1425.25
50
/******************************************************************/
0 43.1246 99.7855 5000 2.35648 2.56874 8.95475E+07 0 0
/******************************************************************/
1 4.83579E+08 54.2658 5000 2.35648 2.56874 8.95475E+07 0 0
/******************************************************************/
2 50.1246 91.7855 5000 2.35648 2.56874 8.95475E+07 0 0
由于Dos字符个数的设置问题,输出时可能会自动换行。
#include<stdio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#define filepath "e://out.txt"
int ReadHead(FILE* fp)
{
do
uble d1,d2,d3,d4,d5;
printf("ready GO..../n");
fscanf(fp,"%lf %lf %lf %lf %lf",&amp;d1,&amp;d2,&amp;d3,&amp;d4,&amp;d5);
printf("%10.6G/n",d1);
printf("%10.6G/n",d2);
printf("%10.6G/n",d3);
printf("%10.6G/n",d4);
printf("%10.6G/n",d5);
return 1;
}
int ReadRecord(FILE* fp)
{
int beg,end,hex;
do
uble d1,d2,d3,d4,d5,d6;
printf("/n/******************************************************************//n");
/*fscanf中大写X代表十六进制是用大写ABCD,小写x代表用小写abcd */
fscanf(fp,"%d %lf %lf %lf %lf %lf %lf %X %d",&amp;beg,&amp;d1,&amp;d2,&amp;d3,&amp;d4,&amp;d5,&amp;d6,&amp;hex,&amp;
end);
printf("%d ",beg);
printf("%16.6G ",d1);
printf("%16.6G ",d2);
printf("%16.6G ",d3);
printf("%16.6G ",d4);
printf("%16.6G ",d5);
printf("%16.6G ",d6);
printf("%X ",hex);
printf("%d ",end);
return 1;
}
int main(int argc, char* argv[])
{
float f1,f2,f;
FILE *fp;
if ( (fp=fopen(filepath,"r"))==0)
{
printf("err/n");
return 1;
}
ReadHead(fp);
while(!feof(fp))
{
ReadRecord(fp);
}
fclose(fp);
getch();
return 0;
}
 
把ReadRecord中的G改为f,上面手快把G也copy了没改过来。
 
多人接受答案了。
 
后退
顶部