文件读写结构体数据问题

懒得搭理你 2010-05-24 04:19:55
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

typedef struct
{
char ch;
char *scode;
}encod;


void Encoding(char *codefile)
{
FILE *fpc;
int i=0;
encod *encode;
encode=(encod *)malloc(27*sizeof(encod));
char ch;
char *scode;
if((fpc=fopen(codefile,"r"))==NULL)
{
printf("can not open");
exit(0);
}

for(i=0;i<27;i++)
{ fscanf(fpc,"%c %s",&ch,&scode);
encode[i].ch=ch;
encode[i].scode=scode;
}

fclose(fpc);
for(i=0;i<27;i++)
printf("%c",encode[i].ch);
}

int main()
{ char codef[10];
printf("请输入文件名:\n");
scanf("%s",codef);
Encoding(codef);
return 0;
}
我的文件内容如下:
# 111 A 1010 B 100000 C 00000 D 10110 E 010 F 110011 G 100001 H 0001 I 0110 J 1100001000 K 11000011 L 10111 M 110010 N 0111 O 1001 P 100010 Q 1100001001 R 0010 S 0011 T 1101 U 00001 V 1100000 W 110001 X 1100001010 Y 100011 Z 1100001011
...全文
214 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒得搭理你 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hpbykec 的回复:]
不知所云……
只是打开一个文件,读取到内存中,然后输出。哪里有数据需要保存……

引用 1 楼 wangyinbin 的回复:
没人吗?怎么保存数据啊,特别是那个字符串
[/Quote]
保存在数组中难道不是保存?
hpbykec 2010-05-24
  • 打赏
  • 举报
回复
不知所云……
只是打开一个文件,读取到内存中,然后输出。哪里有数据需要保存……
[Quote=引用 1 楼 wangyinbin 的回复:]
没人吗?怎么保存数据啊,特别是那个字符串
[/Quote]
huanmie_09 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangyinbin 的回复:]
引用 6 楼 huanmie_09 的回复:
注意读入方式改为:
if(2 == fscanf(fpc," %c %s",&amp;ch,scode)) { //控制串前面加一个空格.
encode[i].ch=ch;
//encode[i].scode=scode;
strcpy(encode[i].scode,scode); //用字符串复制函数

完全正确
可是为什么……
[/Quote]
空格用于匹配文件中分隔的空格.
如文件记录:
# 111 A 1010 B 100000 C
第一次读完后,文件指针指到A前面的空格位置,如果匹配串中不加空格,下一次读的时候, 格式控制传%c会将此空格读入。
懒得搭理你 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huanmie_09 的回复:]
注意读入方式改为:
if(2 == fscanf(fpc," %c %s",&ch,scode)) { //控制串前面加一个空格.
encode[i].ch=ch;
//encode[i].scode=scode;
strcpy(encode[i].scode,scode); //用字符串复制函数
[/Quote]
完全正确
可是为什么要加空格呢?第一个数据前面没有空格啊
懒得搭理你 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 selooloo 的回复:]
分配内存撒,使用完了记得free

C/C++ code

for(i=0;i<27;i++)
{
scode=(char*)calloc(16,sizeof(char));
fscanf(fpc,"%c %s",&ch,scode);//注意不是&scode
encode[i].ch=ch;
encode[i].scode=scode;
}
[/Quote]
错的,数据不能完整的读取,而且有问题
huanmie_09 2010-05-24
  • 打赏
  • 举报
回复
注意读入方式改为:
if(2 == fscanf(fpc," %c %s",&ch,scode)) { //控制串前面加一个空格.
encode[i].ch=ch;
//encode[i].scode=scode;
strcpy(encode[i].scode,scode); //用字符串复制函数
huanmie_09 2010-05-24
  • 打赏
  • 举报
回复
懒得给字符串分配空间就用数组的形式吧:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

typedef struct
{
char ch;
//char *scode;
char scode[50];
}encod;


void Encoding(char *codefile)
{
FILE *fpc;
int i=0;
int j;
encod *encode;
encode=(encod *)malloc(27*sizeof(encod));
char ch;
//char *scode;
char scode[50];
if((fpc=fopen(codefile,"r"))==NULL)
{
printf("can not open");
exit(0);
}

for(i=0;i<27;i++)
{ if(2 == fscanf(fpc," %c %s",&ch,&scode)) {
encode[i].ch=ch;
//encode[i].scode=scode;
strcpy(encode[i].scode,scode);
}
else {
break;
}
}

fclose(fpc);
for(j=0;j<i;j++)
printf("%c %s\n",encode[j].ch, encode[j].scode);
free(encode);
}

int main()
{
char codef[10];
printf("请输入文件名:\n");
scanf("%s",codef);
Encoding(codef);
return 0;
}
selooloo 2010-05-24
  • 打赏
  • 举报
回复
分配内存撒,使用完了记得free

for(i=0;i<27;i++)
{
scode=(char*)calloc(16,sizeof(char));
fscanf(fpc,"%c %s",&ch,scode);//注意不是&scode
encode[i].ch=ch;
encode[i].scode=scode;
}
懒得搭理你 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 selooloo 的回复:]
char *scode;没分配内存
[/Quote]
那该怎么解决啊
selooloo 2010-05-24
  • 打赏
  • 举报
回复
char *scode;没分配内存
懒得搭理你 2010-05-24
  • 打赏
  • 举报
回复
没人吗?怎么保存数据啊,特别是那个字符串

69,336

社区成员

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

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