C语言读取txt文本里的数据。只要格式稍有复杂 就不会读了。。。

darksworld 2014-02-11 02:59:57
点号 x坐标 y坐标
1 58589.592080 54596.681837
P2 59375.790588 53520.303530
D3 57590.790588 53675.457160
USA_90 55646.576183 54255.474606
5 59215.055150 54426.982554
P6 55644.576183 54200.474606

我建立了一个point结构体,想把6个点的x y坐标读进去
第一行用了while(c!='\n') 读到行末尾自动跳出
但是从第二行开始不知道怎么办了。

求指点。。
...全文
157 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
darksworld 2014-02-11
解决了~用的zhao4zhong1 和Automation_dmu 的方法 第一次注意到fscanf的返回值问题。。。

struct point
{
	char num[10];
	double x;
	double y;
};
	point pn[6]; //待判断的6个点
	char dust[50];
	FILE *read;
	read = fopen("欲判断点.dat","r");
	count = 0;
	fgets(dust,60,read); //fgets 后  文件指针指向下一行开头。
	int Line = 1;
	while(!feof(read))
	{
		if(fscanf(read,"%s%lf%lf",&pn[count].num,&pn[count].x,&pn[count].y) == 3)
		{
			count++;
			Line++;
		}
		else
		{
			printf("Line %d Error!\n",Line);
		}
	}
O(∩_∩)O谢谢~
回复
黑泡泡选手 2014-02-11

std::ifstream ifs(szFileName, std::ios::in);
if(ifs.fail())
    return false;

ifs >> lpTestDataX >> lpTestDataY;

ifs.close();
可以参考一下!
回复
AndyStevens 2014-02-11
	FILE *pf;
	struct{
		char name[16];
		double px;
		double py;
	}p;
	pf = fopen("2.c", "r");
	while(!feof(pf))
	{
		fscanf(pf, " %s %lf %lf ",p.name, &p.px, &p.py);
		printf("%-10s %-16lf %-16lf\n",p.name, p.px, p.py);
	}
	fclose(pf);
回复
赵4老师 2014-02-11
第7行前加两句i=0;L=1;
回复
赵4老师 2014-02-11
第7行前加一句i=0;
回复
赵4老师 2014-02-11
struct PS {
 char no[40];
 double x;
 double y;
} ps[100];
……
while(1)
{
    if (NULL==fgets(pc, 1000, pflIn)) break;
    L++;
    if (3==sscanf(pc,"%39s%lf%lf",ps[i].no,&ps[i].x,&ps[i].y) {
      i++;
    } else {
     printf("line %d format error:%s",L,pc);
    }
}
回复
nichengshishenme 2014-02-11
一个思路 没有编译环境草写了一个!就是 1跳过第一行,取出剩下的行! 2在二维数组中对数据进行核查
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char *a,char *b,char *s)
{
	int i,j;
	int c=0;
	for (i=0;i<strlen(a);i++)
	{
		if (a[i]=='\t'&&c==0)
		{
			c=1;
			continue;
		}
		if (c==1)
		{
			for(j=0;a[i]!='\t';j++)
			{
				b[j]=a[i];
			}
			b[j]='\0';
			c=2;
		}
		if (c==2)
		{
			for(j=0;a[i]!='\0';j++)
			{
				c[j]=a[i];
			}
			c[j]='\0';
		}
	}
}
int main()
{
	FILE *fp;
	fp=fopen("1.txt","r");
	char msg[40];
	char qq[10][41];
	char qq1[41];
	char qq2[42];
	memset(msg,sizeof(msg),0);
	int i=0;
	int j=0;
	while(fgets(msg,sizeof(msg)/sizeof(char),fp))
	{
		if (i==0){
		        i++;
			memset(msg,sizeof(msg),0);
	       		continue;
		}
		else{
			j++;
			strcpy(qq[j],msg);
			memset(msg,sizeof(msg),0);
		}
	}
	for (i=0;i<10;i++)
	{
	fun(qq[i],qq1,qq2);	
	printf("%s\t%s\n",qq1,qq2);
	memset(qq1,sizeof(qq1),0);
	memset(qq1,sizeof(qq2),0);
	}
	return 0;
}

回复
darksworld 2014-02-11
引用 楼主 darksworld 的回复:
点号 x坐标 y坐标 1 58589.592080 54596.681837 P2 59375.790588 53520.303530 D3 57590.790588 53675.457160 USA_90 55646.576183 54255.474606 5 59215.055150 54426.982554 P6 55644.576183 54200.474606 我建立了一个point结构体,想把6个点的x y坐标读进去 第一行用了while(c!='\n') 读到行末尾自动跳出 但是从第二行开始不知道怎么办了。 求指点。。
这样读完都是一行一行的字符串啊。那我怎么把 x y坐标存到结构体里呢?
回复
学习QT 2014-02-11

fgets直接读一行

char pc[1000];
FILE *pflIn;
pflIn = fopen("XX.txt", "rb");
fgets(pc, 1000, pflIn);//如果一行的内容小于1000个字节,读到行尾就结束。
while(!feof(pflIn))
{
	...///处理代码
	fgets(pc, 1000, pflIn);//如果一行的内容小于1000个字节,读到行尾就结束。
}

回复
相关推荐
发帖
C语言
创建于2007-09-28

6.4w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2014-02-11 02:59
社区公告
暂无公告