fwrite写入文件乱码问题

2023-05-16

参考下面这篇文章(使用fprintf写入文件)

http://c.biancheng.net/cpp/html/2936.html

使用fprintf 和 fscanf 代替 fwrite

fscanf() 和 fprintf() 函数与前面使用的 scanf() 和 printf() 功能相似,都是格式化读写函数,两者的区别在于 fscanf() 和 fprintf() 的读写对象不是键盘和显示器,而是磁盘文件。

这两个函数的原型为:


int fscanf ( FILE *fp, char * format, ... );
int fprintf ( FILE *fp, char * format, ... );  

fp 为文件指针,format 为格式控制字符串,... 表示参数列表。与 scanf() 和 printf() 相比,它们仅仅多了一个 fp 参数。例如:


   
  1. FILE *fp;
  2. int i, j;
  3. char *str, ch;
  4. fscanf(fp, "%d %s", &i, str);
  5. fprintf(fp,"%d %c", j, ch);

fprintf() 返回成功写入的字符的个数,失败则返回负数。fscanf() 返回参数列表中被成功赋值的参数个数。

【示例】用 fscanf 和 fprintf 函数来完成对学生信息的读写。


   
  1. #include<stdio.h>
  2.  
  3. #define N 2
  4.  
  5. struct stu{
  6. char name[10];
  7. int num;
  8. int age;
  9. float score;
  10. } boya[N], boyb[N], *pa, *pb;
  11.  
  12. int main(){
  13. FILE *fp;
  14. int i;
  15. pa=boya;
  16. pb=boyb;
  17. if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){
  18. printf("Cannot open file, press any key exit!");
  19. getch();
  20. exit(1);
  21. }
  22.  
  23. //从键盘读入数据,保存到boya
  24. printf("Input data:\n");
  25. for(i=0; i<N; i++,pa++){
  26. scanf("%s %d %d %f", pa->name, &pa->num, &pa->age, &pa->score);
  27. }
  28. pa = boya;
  29. //将boya中的数据写入到文件
  30. for(i=0; i<N; i++,pa++){
  31. fprintf(fp,"%s %d %d %f\n", pa->name, pa->num, pa->age, pa->score);
  32. }
  33. //重置文件指针
  34. rewind(fp);
  35. //从文件中读取数据,保存到boyb
  36. for(i=0; i<N; i++,pb++){
  37. fscanf(fp, "%s %d %d %f\n", pb->name, &pb->num, &pb->age, &pb->score);
  38. }
  39. pb=boyb;
  40. //将boyb中的数据输出到显示器
  41. for(i=0; i<N; i++,pb++){
  42. printf("%s %d %d %f\n", pb->name, pb->num, pb->age, pb->score);
  43. }
  44.  
  45. fclose(fp);
  46. return 0;
  47. }

运行结果:


Input data:
Tom 2 15 90.5↙
Hua 1 14 99↙
Tom  2  15  90.500000
Hua  1  14  99.000000  

打开 D:\\demo.txt,发现文件的内容是可以阅读的,格式非常清晰。用 fprintf() 和 fscanf() 函数读写配置文件、日志文件会非常方便,不但程序能够识别,用户也可以看懂,可以手动修改。

如果将 fp 设置为 stdin,那么 fscanf() 函数将会从键盘读取数据,与 scanf 的作用相同;设置为 stdout,那么 fprintf() 函数将会向显示器输出内容,与 printf 的作用相同。例如:


   
  1. #include<stdio.h>
  2. int main(){
  3. int a, b, sum;
  4. fprintf(stdout, "Input two numbers: ");
  5. fscanf(stdin, "%d %d", &a, &b);
  6. sum = a + b;
  7. fprintf(stdout, "sum=%d\n", sum);
  8. return 0;
  9. }

运行结果:
Input two numbers: 10 20↙
sum=30

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fwrite写入文件乱码问题 的相关文章

  • Python3爬虫(一)抓取网页的html

    因为代码只有几行 xff0c 所以可以先贴代码 xff1a import urllib request url 61 r 39 http douban com 39 res 61 urllib request urlopen url htm
  • MySQL8-root用户-提示“1227 - Access denied”解决办法

    MySQL8 root用户 提示 1227 Access denied 解决办法 问题 xff1a 在使用MySQL时提示 1227 Access denied you need at least one of the SYSTEM USE
  • 【Python学习】计算水仙花数(for循环)

    Python学习 计算水仙花数 xff08 for循环 xff09 说明 xff1a 水仙花数是一个三位数 xff0c 三位数各位的立方之和等于三位数本身 计算出的水仙花数有4个 xff1a 153 370 371和407 一 代码 spa
  • 【Python学习】遍历字典

    Python学习 遍历字典 字典 字典 xff08 dict xff09 是可迭代的 通过键 xff08 key xff09 来访问元素的可变的容器类型的数据 字典由两部分视图构成 xff1a 键视图和值视图 键视图不能包含重复的元素 xf
  • 【Python学习】格式化控制符

    Python学习 格式化控制符 在占位符中还可以有格式化控制符 xff0c 对字符串的格式进行更加精准的控制 格式化控制符位于占位符索引或占位符名字的后面 xff0c 之间用冒号分隔 xff0c 语法 xff1a 参数序号 xff1a 格式
  • Oracle:SQL语句--对表的操作——修改列名(即修改字段名)

    修改列名 即修改字段名 alter table 表名 rename column 现列名 to 新列名
  • 社交技能讲座笔记

    作者 xff1a 朱金灿 来源 xff1a clever101的专栏 为什么大多数人学不会人工智能编程 xff1f gt gt gt 感谢张鹏老师做了一堂实用的社交技能讲座 我特地做了一些笔记 xff08 其中包含我的一些理解 xff09
  • Oracle:SQL语句--对表的操作—— 删除字段(即删除列)

    删除一个字段 即删除一列 xff08 未验证在有数据 xff0c 并且互有主外键时 xff0c 是否可用 xff09 语法 xff1a alter table 表名 drop column 字段名 即列名 例 xff1a alter tab
  • Oracle:SQL语句--对表的操作——删除表

    删除表 xff08 未验证在有数据 xff0c 并且互有主外键时 xff0c 是否可用 xff09 表中 列 为 其他表 外键 且有数据 应先解除约束 xff0c 或删除相关表 语法 xff1a drop table 表名 例 xff1a
  • Java作业:输入一个数字判断他是奇数还是偶数

    span class hljs comment 2 输入一个数字判断他是奇数还是偶数 span span class hljs keyword public span span class hljs keyword static span
  • Linux基础知识学习:Linux下修改文件名或修改文件夹名称(有待解决问题)

    Linux下修改文件名或修改文件夹名称 1 修改文件夹名称 1 1我先创建一个test文件夹用来测试 span class hljs keyword mkdir span test 1 2用 mv 命令 将文件移动 xff0c 目标地址如果
  • C语言学习:平方-->乘方(m的n方)

    平方 xff1a 直接用两个数 或变量 相乘就可以表示平方 xff0c 比如x x 不过如果 xff0c 需要求m的n次方 xff0c 就需要用到pow x y 乘方 包括开方 这个库函数了 xff0c 使用pow x y 这个库函数 xf
  • MySql学习:自定义函数之带参函数

    delimiter 如果数据库 test 里的存在函数 formatDate xff0c 就删除这个函数 DROP FUNCTION IF EXISTS test formatDate 创建一个函数 CREATE FUNCTION test
  • docker离线安装

    1 下载离线包 docker官网下载地址 本示例下载的是 xff1a docker 19 03 14 tgz 2 解压到对应目录 解压文件 span class token function tar span xzvf docker 19
  • 2013年:一个技术领导的启程

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 又到一年总结时 总的来说 xff0c 这一年忙碌而充实 xff0c 现在有点胸中有千言却又不知从何说起 可能每一个希望有所作为的开发人员都
  • STM32——硬件IIC从机通信

    前言 xff1a 根据网上的资料 xff0c 大部分网友表示STM32自带的硬件IIC存在bug xff0c 读写时很容易卡死 自己在调试的时候也出现卡死的情况 xff0c 最后一点一点调试 xff0c 也还是调通了 本文将记录自己调试ST
  • HI3516的编译参数-mcpu=cortex-a7、-mfloat-abi=softfp和-mfpu=neon-vfpv4

    前言 Hi3516A具有浮点运算单元和neon 文件系统中的库是采用软浮点和neon编译而成 xff0c 因此所有Hi3516A板端代码编译时需要在Makefile里面添加选项 mcpu 61 cortex a7 mfloat abi 61
  • 算法移植优化基础

    PS xff1a 为了面试准备的 xff0c 总结的有点粗糙 ARM xff1a Advanced RISC Machines xff0c ARM架构是面向低预算市场设计的第一款RISC微处理器 xff0c 基本是32位单片机的行业标准 x
  • DBoW2在windows上的vs工程搭建方法

    xfeff xfeff 注释 xff1a 蓝体字是 opencv249 专用的修改 xff1b 黑体字是 opencv3 需要的修改 环境 xff1a vs2012 32bit 叙述比较简略 不明之处可以留言 1 配置 opencv 2 4
  • MSCKF_vio学习笔记

    最近因为项目需求 xff0c 对MSCKF vio的论文和代码进行了一番研读 xff0c 现将学习过程记下 MSCKF vio是一种基于多状态约束卡尔曼滤波器的双目视觉里程计 其中多状态约束是指将多帧图像的相机位姿加入卡尔曼状态向量中 xf

随机推荐

  • MSCKF2.0(Mingyang Li-IJRR2013) 论文要点总结

    论文 xff1a Li M Mourikis A I High precision consistent EKF based visual inertial odometry J The International Journal of R
  • SLAM,SLAM+IMU的状态估计问题描述-个人理解

    1 状态估计问题 令状态变量为x 61 x1 x2 x3 观测变量为z 61 z1 z2 z3 状态估计问题等同于求解条件概率分布 xff1a P x z xff0c 在当前观测状态z下的状态x分布 xff0c 也就是最可能的状态是什么 由
  • VINS-Fusion运行时的段错误(核心已转储)解决方法

    平台 ubuntu16 04 43 ROS 问题描述 xff1a 前两天VINS的原作者开源了VINS Fusion的双目版以及给出了和GPS融合的一个demo xff0c 所以试着运行下数据集 每次单目运行10s左右 xff0c 双目1
  • Jetson Xavier NX 刷机+更换清华源完美讲解

    当你拿到梦寐以求的NVIDIA Jetson Xavier NX开发板时 xff0c 第一个工作就是要刷机 究竟要怎么做呢 xff1f Let s go 这种板子有两种 xff0c 一种是带Micro SD卡槽的 xff0c 可以插入小型S
  • vmware下vmdk文件越来越大的解决方法探讨

    前段时间在vmware下面安装了ubuntu镜像 xff0c 用了一段时间后发现ubuntu的vmdk文件越来越大 xff0c 达到了31 6GB xff0c 如下图所示 而且随着继续安装新的软件仍然在增大中 即使在ubuntu里面删除了文
  • 工作日志的作用

    朱金灿 公司提倡我们每天都写工作日志 这使得我思考工作日志的作用 我想了一下 xff0c 工作日志应该要起两个作用 xff1a 1 计划作用 俗话说 xff1a 凡事预则立 xff0c 不预则废 最好在每天开始工作前先在工作日志上写下今天要
  • Tracealyzer for FreeRTOS(FreeRTOS+Trace) 详解(源码解析+移植)

    原文 xff1a http blog csdn net zcshoucsdn article details 54670473 最近公司搞新项目 xff0c 需要使用FreeRTOS xff0c 之前只有Linux的基础 xff08 学了个
  • 职场 | Intel因特尔2019届软件工程师秋招笔试题

    同样的本文是对笔试过程中 xff0c 仍然记得的考点的查漏补缺 一共分为三部分 xff1a 选择题 编程题 附加题 时间是两个小时 xff0c 个人感觉因特尔的笔试题对于内核 xff0c 内存管理等方面的考点较多 xff0c 具体属于什么科
  • Linux-LCD驱动实现

    一 帧缓冲设备驱动在Linux子系统中的结构 xff1a 二 帧缓冲相关的重要数据结构 从帧缓冲设备驱动程序结构 看 xff0c 该驱动主要跟fb info结构体有关 xff0c 该结构体记录了帧缓冲设备的全部信息 xff0c 包括设备的设
  • ROS之命名空间

    已经学ROS快两个月了 xff0c 一开始对ROS 命名空间 xff0c 参数 xff0c 参数服务器 xff0c 重映射没认真看 xff0c 后来发现很重要 xff0c 它是学习ROS代码的基础 我们都知道ros以topic通信 xff0
  • CircleProgressBar 一个界面漂亮功能强大的圆形进度条,支持多种属性

    CircleProgressBar 项目地址 xff1a HuTianQi CircleProgressBar 简介 xff1a 一个界面漂亮功能强大的圆形进度条 xff0c 支持多种属性 xff0c 如圆环的大小颜色 xff0c 进度条的
  • Android 串口调试助手

    Android SerialPort Tool 项目地址 xff1a licheedev Android SerialPort Tool 简介 xff1a Android 串口调试助手 更多 xff1a 作者 提 Bug 标签 xff1a
  • 树莓派IIC通讯获取BMI08x IMU数据进行姿态解算,并通过UART/TCP在rviz上显示

    截至2021年 xff0c 树莓派出的最新款应该是Raspberry Pi 400 xff0c 设计得跟键盘一样 xff0c 很难想象到这是个树莓派 xff0c 尤其是它的标语写的很好 你的下一个电脑 xff0c 何必是电脑 xff0c 不
  • 运用ROS和OpenCV进行简单的图像处理之检测

    本文主要讲述在ROS下使用opencv进行图像处理 xff0c 并给出了一个详细示例 首先建立一个ros包 xff0c 在CMakeLists txt中加入以下代码段 xff0c 用于找到并链接OpenCV 安装完整版的ROS会顺带把Ope
  • ROS工程中C++调用python函数

    在ROS api程序中 xff0c 大部分函数的实现是用的python xff0c python语言简单易学 xff0c 特别做一些测试和调试非常简单 因此 xff0c 在C 43 43 中调用python函数会极大地减少工作量 在C 43
  • Cleanup failed to process the following paths错误的解决

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 在使用TortoiseSVN工具执行Cleanup操作时经常出现Cleanup failed to process the followi
  • json字符串、json对象、数组 三者之间的转换

    json字符串 json对象 数组 三者之间的转换 lt script gt json字符串 json对象 数组 三者之间的转换 let jsonStr 61 39 34 id 34 34 01 34 34 open 34 false 34
  • 嵌入式开发之Vscode实用插件大全

    嵌入式开发之Vscode实用插件大全 Chinese Simplified 简体中文 xff08 神器 xff09 C C 43 43 amp CMake amp C C 43 43 Extension Pack xff08 神器 xff0
  • 海康卫视web3.0遇到的问题总结。

    一 Uncaught DOMException Failed to execute open on XMLHttpRequest Invalid URL 解决办法 xff1a 启动一个静态文件服务器 例如 xff1a 1 npm insta
  • fwrite写入文件乱码问题

    参考下面这篇文章 xff08 使用fprintf写入文件 xff09 http c biancheng net cpp html 2936 html 使用fprintf 和 fscanf 代替 fwrite fscanf 和 fprintf