C语言读取TXT文件,忽略文件空格,把内容写入数组中应该怎么实现?

CaffeyChen 2015-05-31 02:49:58
#include <stdio.h>
#include <stdlib.h>

#define SIZE_view 50

struct view_info
{
int id;
char name[20];
int code;
char shortname[20];
char LName[100];
}views[SIZE_view];
void read()
{
FILE *fp;
int i;
fp=("1.txt",r);//接下来我想不到好的方法
}

这里是1.txt的内容,里面如果用fscanf格式化会读入空格,有没有什么好的方法,能把空格忽略,然后直接把其他内容读入views[i].id等等数组里面

1 哈尔滨 101 HaEB 哈大线,京哈线
2 长春 102 CHCH 哈大线,京哈线
3 沈阳 103 SHY 哈大线,京哈线
4 大连 104 DL 哈大线,京哈线
5 天津 105 TJ 京哈线,京沪线
6 北京 106 BJ 京哈线,京沪线,京广线,京福线
7 呼和浩特 107 HHHT 京西线,徐西线
8 乌鲁木齐 108 WLMQ 乌兰线
9 西宁 109 XN 京西线,徐西线
10 兰州 110 LZ 京西线,徐西线,乌兰线
11 西安 111 XA 徐西线,京昆线
12 郑州 112 ZHENGZ 京昆线,京广线,徐西线
13 徐州 113 XZH 徐西线,京沪线,京福线
14 上海 114 SHH 京沪线,南沪线,京福线
15 武汉 115 WH 京广线
16 成都 117 CHD 京昆线
17 昆明 116 KM 京昆线,昆柳线,昆福线
18 贵阳 118 GY 昆柳线,南成线,昆福线
19 株洲 119 ZHUZH 南沪线,京九线,昆福线
20 南昌 120 NCH 京福线,昆福线
21 福州 121 FZH 京福线,昆福线
22 广州 122 GUANGZ 京广线
23 深圳 123 SHZH 京广线
24 柳州 124 LZH 昆柳线,南沪线,南成线
25 南宁 125 NN   南沪线,南成线
26 赤峰 126 CHF 京赤线
27 北票 127 BP 沈票线
...全文
3277 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiqin-aoxuie 2018-02-22
  • 打赏
  • 举报
回复
为什么我用struct写了一个读取txt表格数据的程序运行时输出了许多不应该出现的数据呀?
xly120404126 2016-08-11
  • 打赏
  • 举报
回复
弄好了
xly120404126 2016-08-11
  • 打赏
  • 举报
回复
引用 5 楼 zhangxiangDavaid 的回复:
引用 4 楼 miss46799 的回复:
回复3楼,太赞!
能帮我看看我这个么?运行出来都是0,但p的值是对的,感觉像D矩阵写入不对,不知道哪里错了请各位指导一下 txt文件如下
0.5 -0.5 0.0 1.0 0.0 0.0
-0.5 -0.5 0.0 0.0 1.0 0.0
0.0 0.5 0.0 0.0 0.0 1.0
6个数一行,每个数之间都有一个空格 [code=c#include "stdafx.h" #include <stdio.h> #define MAXDATA 1000 double D[MAXDATA][6];// char ln[80];//用于存取读出数据的数组 FILE *f; int i,n; char *p; int main(){ f=fopen("D:\\todel\\opengl\\ConsoleApplication3\\Debug\\1.txt","r");//打开txt文件 if(NULL==f){ printf("Can not open file 1.txt!\n");//判断是否可以打开文件 return 1; } i=0; while (1){ if (NULL==fgets(ln,80,f)) break; p = ln ; sscanf(p,"%f%f%f%f%f",&D[i][0],&D[i][1],&D[i][2],&D[i][3],&D[i][4],&D[i][5]); i++; } n=i; for (i=0;i<n;i++){ printf("%f %f %f %f %f %f\n",D[i][0],D[i][1],D[i][2],D[i][3],D[i][4]),&D[i][5]; } fclose(f); return 0; }][/code]
苏叔叔 2015-05-31
  • 打赏
  • 举报
回复
引用 4 楼 miss46799 的回复:
回复3楼,太赞!
CaffeyChen 2015-05-31
  • 打赏
  • 举报
回复
回复3楼,太赞!
苏叔叔 2015-05-31
  • 打赏
  • 举报
回复
这样可好:

#include <stdio.h>
#include <stdlib.h>
#define SIZE_view 50
struct view_info
{
	int id;
	char name[20];
	int code;
	char shortname[20];
	char LName[100];
}views[SIZE_view];
FILE *f;
char buf[256];
char *p;
int i, n;
int main(void)
{
	if (NULL == (f = fopen("1.txt", "r")))
	{
		fprintf(stderr, "Can not open file : 1.txt");
		return 1;
	}
	i = n = 0;
	while (1)
	{
		if (n == SIZE_view) break;
		if (NULL == fgets(buf, 256, f)) break;
		if ('\n' == buf[0]) continue;     //空行继续
		p = buf;
		sscanf(p, "%d%s%d%s%s", &views[n].id, views[n].name, &views[n].code, views[n].shortname, views[n].LName);
		n++;
	}
	do
	{
		printf("%d %s %d %s %s\n", views[i].id, views[i].name, views[i].code, views[i].shortname, views[i].LName);
		i++;
	} while (i < n);
	fclose(f);
	return 0;
}
CaffeyChen 2015-05-31
  • 打赏
  • 举报
回复
buf是什么啊,我还不知道怎么用
FightForProgrammer 2015-05-31
  • 打赏
  • 举报
回复
你一行行读到自己的buf中,然后从buf中过滤空格解析到你的结构体

70,035

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧