c语言怎么把txt格式的文件读到结构体里?

例如 把
1 a a a a a 1 1 1 1
2 b b b b b 2 2 2 2
3 c c c c c 3 3 3 3
分三次读到一个结构体里

1.你得先弄会流文件的读取http://blog.csdn.net/sky101010ws/article/details/6744062 这里是流文件的相关函数
2.读取流文件之后,获取的文件中的字符串信息也就是a a a a a 1 1 1 1 b b b b b 2 2 2 2 2 c c c c c 3 3 3 3。然后判断字符串中的空格和换行符,截取其中的a 1 b 2 c 3等字符(都是char型),接着判断1 2 3的ascii码范围,将其转换为整形(利用函数 int atoi(const char *nptr);)。当然,如果你TXT文件中的字符信息都是固定格式的,那就可以省略1 2 3 整形信息的判断,直接将其转换为整形。
3.获取文件中需要的信息a 1 b 2 c 3的同时,将其输入结构体中就可以了。追问

谢谢了,内容挺全的,调用一个函数,用结构体具体怎么实现头指针的传递,要求读完之后返回头指针。

追答

/* HELLO.C -- Hello, world */

#include "stdio.h"

struct sTemp{
char cTemp;
int iTemp;
struct sTemp *next;
};

void fileIn(struct sTemp *head); /*文件流输入*/
void sTempIn(struct sTemp *p,char cTemp,int iTemp);/*结构体信息录入*/
main()
{
struct sTemp *head,*out;

head=(struct sTemp *)malloc( sizeof( struct sTemp));
head->next=NULL;

fileIn(head);

/*结构体信息输出*/
out=head->next;
while(out!=NULL)
{
printf("cTemp=%c,iTemp=%d\n",out->cTemp,out->iTemp);
out=out->next;
}
getchar();
}

void fileIn(struct sTemp *head)
{
/*下面本应该是文件中char int信息的截取部分,现在直接定义*/
char cTemp[3]={'a','b','c'};
int iTemp[3]={1,2,3};
struct sTemp *p; /*指向结构体链表的尾部*/
int n=3; /*限定输入结构体的次数,你的应该是根据文件里的数据重新设定判断语句*/

p=head;

while(n)
{
sTempIn(p,cTemp[n-1],iTemp[n-1]);
p=p->next; /*p指向尾部*/
n--;
}

}

void sTempIn(struct sTemp *p,char cTemp,int iTemp)
{
struct sTemp *q;

if( (q=(struct sTemp *)malloc( sizeof( struct sTemp)))==NULL)
{
printf("分配空间失败!\n");
return;
}

q->cTemp=cTemp;
q->iTemp=iTemp;
q->next=NULL;

p->next=q;

}

这是我刚编的,你看一下,有不明白的再问我。

追问

再次表示感谢,受到你的启发,我调用了一个插入函数把问题解决了。谢谢啦。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-26

1、C语言中对结构体数据格式文件进行读取时,必须以二进制格式打开文件,然后按结构体类型变量内存块方式进行数据读取,相关读数据命令为fread()。
    函数说明:
           #include <stdio.h>
           size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
            从stream文件流中,读取nmemb个size大小的数据块到ptr所指的内存buf中,返回读取到的有效数据块数。
2、例如,有如下结构体定义:

    typedef struct TEST 
    { 
        int num;
        double score;
    }STRTEST;
    STRTEST data ;
    FILE *fp = fopen("file.dat", "rb" ) ; //按二进制格式打开文件
    int n=fread( &data, sizeof(STRTEST), 1, fp ); //读取一个数据块到变量data中。

3、注意,当结构体中定义的变量有指针类型时,在存储数据时,就不能按结构体进行存储了。因为,指针变量中存储的是内存地址,而程序在不同环境运行时,所使用的内存地址是不同的,只存储内存地址,不能把真正的数据保存下来,所以,即使是正确读取到文件内容,也不能得到当时的结构体内存数据。因而,在存储结构体数据时,要根据结构体类型变量特点采用正确的方法进行存储,才能正确的读取。

第2个回答  2012-04-04
先fopen(""")
再用fscanf()函数
相似回答