代码示例_标准IO_fread / fwrite

博客记录了fread_fwrite的测试情况,测试结果为成功,还给出了转载来源。

fread_fwrite


 fread_fwrite.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 typedef struct info{
 6     int age;
 7     int tail;
 8     char name[20];
 9 }info;
10 
11 
12 int main(void)
13 {
14     info panda = {20,180,"panda_w"};
15 
16     // 打开/创建
17     FILE *fp = fopen("./1.text","w+");
18     if(fp==NULL){
19         perror("fopen failed");
20         exit(1);
21     }
22 
23     //
24     if(  fwrite(&panda,sizeof(info),1,fp)==1  )
25         printf("write OK!\n");
26 
27     // 关闭
28     fclose(fp);
29 
30 
31     // 打开/创建
32     fp = fopen("./1.text","r");
33     if(fp==NULL){
34         perror("fopen failed");
35         exit(1);
36     }
37 
38     //
39     info pa ;
40 
41     if(  fread(&pa,sizeof(pa),1,fp)==1  )
42         printf("read success!\n");
43 
44     printf("age:%d\ntail:%d\nname:%s\n",pa.age,pa.tail,pa.name);
45 
46 
47     return 0 ;
48 }

 

 

测试:


 

 

 

 

 

 

 

success !

 

转载于:https://www.cnblogs.com/panda-w/p/11075731.html

#include "zf_common_headfile.h" // *************************** 例程测试说明 *************************** // 1.久久派与主板使用54pin排线连接 再将久久派插到主板上面 主板使用电池供电 下载本例程 // // 2.打开终端可以看到: // read_u16_dat = 1234567 // read_float_dat = 1.234560 // // 3.按下按键即可看到不同的输出状态 // // **************************** 代码区域 **************************** // 对于linux来说,一切皆文件,所以存储参数,也是通过文件的。 // 这里我们只是简单的演示下,如何使用。 #define FILENAME_U16 "parameter_u16.txt" #define FILENAME_FLOAT "parameter_float.txt" uint32 write_u16_dat = 1234567; float write_float_dat = 1.23456; uint32 read_u16_dat = 0; float read_float_dat = 0; int main(int, char**) { // ---------- 写入并读取整数 ---------- // // 设置临时buffer char buffer[100] = {0}; // 将需要写入的数组,以字符串的方式存放到数组中 sprintf(buffer, "%d", write_u16_dat); // 文件写 file_write_string(FILENAME_U16, buffer); // 清空buffer memset(buffer, 0, sizeof(buffer)); // 读取字符串 file_read_string(FILENAME_U16, buffer); // 这里的atoi是将字符转化为整数。 // 如果是浮点数需要使用atof read_u16_dat = atoi(buffer); printf("read_u16_dat = %d\r\n", read_u16_dat); // ---------- 写入并读取整数 ---------- // // ---------- 写入并读取浮点数 ---------- // // 将需要写入的数组,以字符串的方式存放到数组中 sprintf(buffer, "%f", write_float_dat); // 文件写 file_write_string(FILENAME_FLOAT, buffer); // 清空buffer memset(buffer, 0, sizeof(buffer)); // 读取字符串 file_read_string(FILENAME_FLOAT, buffer); // 这里的atof是将字符转化为浮点数。 // 如果是整数需要使用atoi read_float_dat = atof(buffer); printf("read_float_dat = %f\r\n", read_float_dat); // ---------- 写入并读取浮点数 ---------- // }
最新发布
06-24
<think>我们被要求提供在Linux系统中使用C语言通过文件读写整数和浮点数的示例代码。根据引用[2]和引用[3]中提到的文件操作,我们可以使用fprintf和fscanf进行格式化的文件读写。同时,引用[4]和引用[5]提到了浮点数在内存中的存储,但我们在文件读写中通常使用文本模式,即以可读的字符串形式存储。计划:1.写入文件:我们将打开一个文件,然后写入一些整数和浮点数(以文本形式)。2.读取文件:再打开同一个文件,读取这些整数和浮点数。注意:在文本模式下,数据以字符串形式存储,所以我们可以用文本编辑器查看。我们将写一个简单的程序,包含以下步骤:-写入文件:使用fprintf将整数和浮点数写入文件。-读取文件:使用fscanf从文件中读取整数和浮点数。同时,为了演示多个数据,我们写入几个整数和浮点数,然后读取它们。考虑到引用[3]中的示例,我们使用fopen的"w"模式来写,使用"r"模式来读。但是注意:在Linux下,文件路径可以使用正斜杠(/),与Windows不同。我们将创建一个文件,例如:"/tmp/data.txt"(在Linux的临时目录中)。示例代码将包括:1.写入整数和浮点数到文件。2.从同一个文件中读取这些数据并打印。注意:由于是文本文件,数据之间需要分隔符(如空格、换行)以便读取。代码结构:#include<stdio.h>intmain(){//1.写入文件FILE*fp=fopen("/tmp/data.txt","w");if(fp==NULL){perror("打开文件失败(写)");return1;}inti1=10,i2=-5;floatf1=3.14159,f2=-2.71828;//使用fprintf写入,每个数据后面加空格或换行fprintf(fp,"%d%d%f%f\n",i1,i2,f1,f2);//或者可以分开写,这里为了简单写在一行,用空格分隔fclose(fp);//2.读取文件fp=fopen("/tmp/data.txt","r");if(fp==NULL){perror("打开文件失败(读)");return1;}intri1,ri2;floatrf1,rf2;//按照写入的格式读取if(fscanf(fp,"%d%d%f%f",&ri1,&ri2,&rf1,&rf2)!=4){printf("读取的数据数量不足或格式错误\n");}else{printf("读取的整数:%d,%d\n",ri1,ri2);printf("读取的浮点数:%f,%f\n",rf1,rf2);}fclose(fp);return0;}但是,注意:浮点数的精度问题,写入和读取可能会有微小的舍入误差,因为文本表示可能不是精确的。另外,我们也可以使用二进制模式进行读写(使用fwritefread),但题目要求整数和浮点数,并且没有指定二进制模式,所以我们使用文本模式。然而,用户的问题没有指定文本模式还是二进制模式,但根据引用[2]和引用[3]的示例,我们采用文本模式。如果用户需要二进制模式,我们可以另外提供示例,但这里先按照文本模式。但是,注意引用[3]中使用了fscanf读取整数,我们这里也类似。我们将提供一个完整的示例代码。</think>以下是一个在Linux系统中使用C语言读写整数和浮点数的完整示例代码,包含详细注释: ```c #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; const char *filename = "data.bin"; // 文件名 // ================= 写入文件 ================= fp = fopen(filename, "wb"); // 二进制写入模式 if (fp == NULL) { perror("文件打开失败(写)"); exit(EXIT_FAILURE); } int int_data[] = {42, -7, 100}; // 整数数组 float float_data[] = {3.14159, -2.71828, 1.414}; // 浮点数数组 // 写入整数和浮点数 fwrite(int_data, sizeof(int), 3, fp); // 写入3个整数 fwrite(float_data, sizeof(float), 3, fp); // 写入3个浮点数 fclose(fp); printf("数据写入成功 ✅\n\n"); // ================= 读取文件 ================= fp = fopen(filename, "rb"); // 二进制读取模式 if (fp == NULL) { perror("文件打开失败(读)"); exit(EXIT_FAILURE); } int read_ints[3]; float read_floats[3]; // 读取整数和浮点数 fread(read_ints, sizeof(int), 3, fp); // 读取3个整数 fread(read_floats, sizeof(float), 3, fp); // 读取3个浮点数 fclose(fp); // 打印读取结果 printf("读取的整数: "); for (int i = 0; i < 3; i++) { printf("%d ", read_ints[i]); } printf("\n读取的浮点数: "); for (int i = 0; i < 3; i++) { printf("%f ", read_floats[i]); } printf("\n"); return 0; } ``` ### 代码说明: 1. **二进制模式读写**: - 使用`"wb"`和`"rb"`模式进行二进制读写 - 直接操作内存中的二进制表示(整数用补码,浮点数用IEEE 754标准[^4][^5]) 2. **关键函数**: - `fwrite()`:将内存数据直接写入文件 - `fread()`:从文件直接读取到内存 - `sizeof()`:获取数据类型大小(确保跨平台一致性) 3. **数据存储细节**: - 整数:以二进制补码形式存储[^1] - 浮点数:按IEEE 754标准存储(符号位+指数+尾数)[^4][^5] - 文件布局:前12字节(3×int) + 后12字节(3×float) ### 编译运行: ```bash gcc file_io.c -o file_io ./file_io ``` ### 输出示例: ``` 数据写入成功 ✅ 读取的整数: 42 -7 100 读取的浮点数: 3.141590 -2.718280 1.414000 ``` ### 文本模式补充: 如果需要人类可读的文本格式,可用以下方法: ```c // 文本写入 fprintf(fp, "%d %d %d\n", int_data[0], int_data[1], int_data[2]); fprintf(fp, "%f %f %f\n", float_data[0], float_data[1], float_data[2]); // 文本读取 fscanf(fp, "%d %d %d", &read_ints[0], &read_ints[1], &read_ints[2]); fscanf(fp, "%f %f %f", &read_floats[0], &read_floats[1], &read_floats[2]); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值