c语言文件读取并写入结构体
时间: 2023-11-08 08:57:40 浏览: 66
以下是一个简单的C语言程序,演示如何从文件中读取数据并将其写入结构体:
```
#include <stdio.h>
typedef struct {
int id;
char name[50];
float salary;
} Employee;
int main() {
FILE *fp;
Employee e;
fp = fopen("employees.txt", "r");
if (fp == NULL) {
printf("Error: cannot open file.\n");
return -1;
}
while (fscanf(fp, "%d %s %f", &e.id, e.name, &e.salary) != EOF) {
printf("ID: %d, Name: %s, Salary: %.2f\n", e.id, e.name, e.salary);
}
fclose(fp);
return 0;
}
```
这个程序假设有一个名为“employees.txt”的文本文件,包含员工的ID、姓名和薪水,每行一个员工。程序打开文件,然后使用一个循环从文件中读取一行数据,并将其存储在一个Employee结构体中。最后,程序打印出每个Employee的信息。
相关问题
C语言读取外部flash写入结构体
下面是一个简单的示例代码,演示如何使用C语言从外部Flash读取数据并将其写入结构体中:
```c
#include <stdint.h>
#include <stdio.h>
// 定义一个结构体
typedef struct {
uint32_t id;
uint8_t name[20];
uint16_t age;
} Person;
// 定义外部Flash地址
#define FLASH_ADDR 0x08010000
int main(void) {
Person p;
// 从外部Flash中读取数据
uint32_t *addr = (uint32_t *)FLASH_ADDR;
p.id = *addr++;
memcpy(p.name, (uint8_t *)addr, 20);
addr += 5;
p.age = *addr;
// 打印结果
printf("ID: %d\n", p.id);
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);
return 0;
}
```
在上面的代码中,定义了一个名为Person的结构体,其中包含一个ID、一个名字和一个年龄。然后,使用#define指令定义了外部Flash地址,以便在程序中使用。在main函数中,首先声明了一个Person类型的变量p,然后从外部Flash中读取数据并将其写入结构体中。最后,通过printf语句打印结果。
需要注意的是,上面的代码中使用了一些硬编码的值,例如20和5。在实际应用中,这些值应该根据实际情况进行调整。另外,还需要注意数据的大小和字节对齐问题,以确保正确读取和写入数据。
C语言把txt文件写入结构体
要将txt文件写入结构体,需要先定义一个结构体类型,并在程序中打开文件并读取数据。假设txt文件中的数据格式为每行三个数字,表示一个结构体中的三个成员,可以按照以下步骤进行:
1. 定义结构体类型
```c
typedef struct {
int member1;
int member2;
int member3;
} StructType;
```
2. 打开文件并读取数据
```c
FILE *fp;
fp = fopen("file.txt", "r"); // 打开文件
if(fp == NULL) {
printf("Error opening file\n");
exit(1);
}
StructType array[10]; // 假设txt文件中有10行数据,定义一个结构体数组来存储
int i = 0;
while(fscanf(fp, "%d %d %d", &array[i].member1, &array[i].member2, &array[i].member3) == 3) {
i++;
}
fclose(fp); // 关闭文件
```
在上述代码中,fscanf()函数可以按照指定格式读取txt文件中的数据,并将其存储到结构体数组中。当读取到的数据不符合指定格式时,fscanf()函数会返回读取到的数据个数,因此可以根据返回值判断是否读取成功。
3. 使用结构体数据
读取数据后,可以通过访问结构体成员来使用数据。例如,可以按照以下方式输出第一行数据:
```c
printf("member1: %d, member2: %d, member3: %d\n", array[0].member1, array[0].member2, array[0].member3);
```
注意,上述代码中假设txt文件中有10行数据,因此定义了一个10个元素的数组。如果读取到的数据行数不足10行,可能会出现数组越界等问题,因此需要根据实际情况调整数组大小或者添加足够的错误处理逻辑。