文件操作fwrite写txt文件乱码怎么办,我这里有方法解决

2023-05-16

很多大一新生到了期末做课设时,遇到文件操作。总会有人不明白为什么写入的内容会乱码。

先引入一些知识;

*文件有二进制文件,文本文件。

二进制文件是按内存写入的;
文本文件是按格式写入的;*

因此二进制文件用来写入一些不同类型的数据时 就容易出现 将下一个数据写到了上一个数据的内存中。
例如:int 型有四个字节。但是你写入1 时 只用了一个字节(八个位 00000001),后面本来属于int 的内存就会被后面一个要写入的数据给占有。
所以 用int的四个字节的二进制数转化成的字符就会乱码。

而文本文件是按格式写入写出的。也就是说,他保证了不会去占有别的数据的空间。因此不会出现乱码的情况。

说到这里 孰强孰弱 已经分晓。

我今晚有空,好奇把谭浩强c语言这本书上的例题代码,打了一遍。写入文件。结果竟然乱码了。呵呵,这。。。

#include<stdio.h>
#include<math.h>
struct stu
{
	char name[10];
	int num;
	int age;
	char add[15];

}A[2];
void save(){
	FILE* fp;
	int i;
	if ((fp = fopen("stu.txt", "wb+")) == NULL)
	{
		printf("h");
		return;
	}
	for (i = 0; i < 2; i++)
	{
		if (fwrite(&A[i], sizeof(struct stu), 1, fp) != 1)
			printf("erroe");
	}
	fclose(fp);
}
int main()
{
	int i;
	for (i = 0; i < 2; i++)
	{

		scanf("%s%d%d%s", A->name, &A->num, &A->age, A->add);
		save();
		return 0;
	}
	
}

下面根据自己的经验来说一下如何解决这个问题

fwrite 是根据二进制写入的函数
fprintf 则是按格式写入的函数。引用的格式这里就不说了。
看这篇文章可以写到更多
讲解fprintf

但是要注意:他们都有伴侣哦 不要拆散他们。
fprintf fscanf 一对 fwrite fread 一对
最好对应他们的另一半。交叉使用的话 可能不出错,但不保险。。

还有就是文件的使用方式

既然使用文本文件的函数 那么打开文件时也要对应的操作
这里推荐使用w+
好处就是 如果你没有你输入文件名这个文件,他会帮你建一个新的。
而且可读可写。不会乱码哟。在这里插入图片描述
给一串代码做例子吧

void Save_massage2(struct stu* p_Head) {
	//打开文件
	FILE* p_File;
	p_File = fopen("playerGrade.dat.txt", "w");

	if (p_File == NULL) {
		printf("打开文件失败\n");
		return 0;           //exit (0);
	}
	else
		printf("本地保存成功\n");
	struct stu* p = p_Head;
	char s[100] = { "NAME\tNO.\t  sco1  sco2 sco3  sco4 sco5  sco6 sco7  sco8 sco9  sco10   average\n" };
	char s2[100] = { "---------------------------------------------------------------------------------------------\n" };
	//写入数据
	fprintf(p_File, "%s", s);
	fprintf(p_File, "%s", s2);
	while (p != NULL)
	{
		int i = 0;
		fprintf(p_File, "%s\t", p->name);
		fprintf(p_File, "%d\t", p->rank);
		for (i = 0; i < 10; i++)
		{
			fprintf(p_File, "%6.2f", p->score[i]);
		}
		fprintf(p_File, "%6.2f\n", p->aver);

		p = p->p_next;
	}

	//关闭文件
	fclose(p_File);
}

结果图片之前发过了
在这里插入图片描述
用按格式写入函数 对于文件内容也可以清晰排版 例如我这个格式:
可以看上面代码 如何实现

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

文件操作fwrite写txt文件乱码怎么办,我这里有方法解决 的相关文章

  • Python:把列表内容按行数写入txt

    事情的起因是我需要把一个元素全为数字的列表按固定列数写入txt文件 xff0c 也就是每行几个元素 xff0c 用逗号隔开 看了一些网上的分享觉得都不太合适 xff0c 于是自己想了一个办法 xff0c 一行代码解决 xff0c 废话少说
  • CMakeLists.txt中FIND_PACKAGE()是如何工作的?

    官方文档 xff1a https cmake org cmake help latest command find package html FIND PACKAGE lt PackageName gt 如何查找头文件和库文件路径 xff1
  • Matlab:excel文件 转 txt文件 (只需2行代码)

    亲测有用 xff0c 只需两行代码 xff0c 将EXCEL文件 xff0c 转换成txt文件 xff1a Data 61 readtable 39 TEST xls 39 writetable Data 39 test txt 39 ex
  • cmake与make的区别及CMakeLists.txt文件编写

    一 cmake与make的区别 make工具是一个自动化编译工具 xff0c 它会根据Makefile中的规则进行批处理编译 当需要编译的文件较多时 xff0c 使用make工具会大大提高效率 但是 xff0c 当项目较大时 xff0c 编
  • io流读写文件(文件内容修改)

    package cn sos psasps import java io BufferedReader import java io BufferedWriter import java io FileReader import java
  • java导入csv格式文件之身份证格式处理

    一 出现的问题 csv中的身份证号如下图 导到数据库中的结果 因此怎样导入才能使身份证能够正常导入呢 2 解决方案 第一步 选中身份证那一列 第二步 右键选择 设置单元格格式 第三步 数字列中 选择 特殊 gt 邮政编码 点击确定
  • Java调用.exe文件

    package cn sos psasps public class TestExe public static void main String args Runtime runtime Runtime getRuntime test01
  • 一个开发的记单词小程序

    这里写目录标题 效果演示 功能1测试 功能简介 代码实现 效果演示 输入1 敲下Enter 回车键 后 进入第一个功能英译汉 给出Hello 用户输入中文意思 你好 敲下回车确定 进入下一个单词 功能1测试 功能简介 1 分别编辑中文和英文
  • COLMAP导出相机外参(bin文件转txt文件)

    官方给出的images txt如下图 Image list with two lines of data per image 每张图像数据占两行 IMAGE ID QW QX QY QZ TX TY TZ CAMERA ID NAME 图像
  • JS获取本地图片和网络图片的宽高尺寸和存储大小

    最新更新时间 2020年07月08日09 13 28 猛戳 查看我的博客地图 总有你意想不到的惊喜 本文内容 图片作为一种记录信息的载体 比文本更加生动 比视频更加精简 在日常生活中的用处很大 作为前端开发人员 操作图片的场景非常多 本文记
  • qt中复制文件的功能

    1 利用qt来复制文件 首先新建个工程文件 拖入按钮 复制文件 2 需要引入的头文件如下 include
  • excel文件拷贝

    package cn sos until import java io File import java io FileInputStream import java io FileOutputStream import java io I
  • C语言一行一行读取文件

    C语言中 使用fgets函数可以一行行读du取文件 1 fgets函数 原型 char fgets char buf int bufsize FILE stream 功能 从文件结构体指针stream中读取数据 每次读取一行 说明 读取的数
  • 无法使用 fwrite 将 int 写入文件

    我正在尝试格式化我的键盘日志输出 以便它显示时间 t time 0 now localtime t if now gt tm min prevM now gt tm hour prevH prevM now gt tm min prevH
  • 尽管文件已被另一个程序更改,但 fread 未读取更新的值

    有两个程序同时处理我的特殊文件 他们有一个共同的起点 define TASK POSITION 0x0100 include
  • fwrite 内部是否调用任何锁?

    在Solaris 中 当我将dbx 连接到正在运行的堆栈之一时 我发现对fwrite 的调用导致了 lll lock wait 什么情况下会发生这种情况 fwrite 是否在内部尝试获取锁 我查看的标准 C99 和 POSIX 没有提及有关
  • 在 php 中读取然后覆盖文件内容的最佳方法是什么?

    php 中打开文件 读取内容并随后使用基于原始内容的一些输出覆盖文件内容的最干净方法是什么 具体来说 我试图打开一个填充有项目列表 以换行符分隔 的文件 处理 添加项目到列表中 从列表中删除最旧的 N 个条目 最后将列表写回到文件中 fop
  • 如何在python中修改Yolo .txt文件的值

    我想修改包含 txt 文件的文件夹 txt 文件如下所示 3 0 695312 0 523958 0 068750 0 052083 3 0 846875 0 757292 0 071875 0 031250 3 0 830469 0 71
  • 在C中将XImage写入.bmp文件

    我正在使用以下代码将 XImage 写入文件 bitmap0 bmp 但是当我在 fedora 中使用 imageViewer 打开新创建的文件时 它会给出 文件过早结束 错误并且不显示任何内容 谁能指出以下代码中的问题吗 typedef
  • C 函数 fwrite() 不写入文件

    我正在尝试编写结构tempGroupFile into GroupFile fwrite 写入时返回1 但实际上文件中没有写入数据GroupFile 功能printRec 在屏幕上打印出结构 data是结构变量 文件GroupFile这些操

随机推荐

  • matlab学习笔记

    matlab笔记 上课期间自己整理的一系列matlab相关用法的笔记 xff0c 自认为也并不非常有条理 xff0c 但还是囤放在这里 xff0c 供需要的人查阅 取用 写在前面 help 43 函数名 xff1a 查找某函数的使用方法lo
  • 计算机组成原理——总线

    一 总线概述 1 xff0e 基本概念 xff08 1 xff09 总线简图 每个总线可能由很多根信号线组成 xff08 2 xff09 总线的物理实现 如上图 xff0c 4根信号线组成 一根 总线 xff0c 所有硬件部件都可以通过这根
  • 计算物理学复习笔记(一) 连续随机变量的抽样(直接、变换抽样,三类舍选法)

    文章目录 前言 前置知识一 直接抽样法二 变换抽样法三 舍选法1 第一类舍选法2 第二类舍选法3 第三类舍选法 总结 前言 使用教材 xff1a 马文淦 计算物理学 xff0c 限于篇幅 xff0c 这本书上部分知识写得并不十分详细 xff
  • Keil MDK配置ARM汇编/C语言混合开发环境

    Keil MDK配置ARM开发环境 1 安装Keil MDK 安装方法这里不再说明 xff0c 懂得都懂 xff01 x1f436 2 安装ARM开发包 在Keil MDK5之后 xff0c 不再原生支持ARM7 9 xff0c 需要自行安
  • ESP8266初学(一) 遇问题大全及解决方案(持续更新)

    最近开始学习wifi模块 xff0c 谁知一开始用PC连接调试wifi模块就遇到了很多问题 一 输入指令后没有反应 刚起步就头大 快乐地接好各种接口各种线 xff0c 连上电脑发现它冒蓝光光了 xff0c 好耶 xff01 然后兴致勃勃打开
  • PTA实验题:6-4 派生类的定义和使用 (10 分)

    按要求完成下面的程序 xff1a 1 定义一个Animal类 xff0c 包含一个void类型的无参的speak方法 xff0c 输出 animal language 2 定义一个Cat类 xff0c 公有继承自Animal类 xff0c
  • 模块学习(一)——编码电机

    想实现对电机的测速 xff0c 因此开始接触编码电机 此次采用的是RS365编码器电机 一 编码电机的初步了解 通过编码电机可以测出速度 常见一般编码电机分成两种 xff0c 一是光电编码器 xff0c 另一个是霍尔编码器 有六个接口 xf
  • nuxt如何处理用户登录状态持久化:nuxtServerInit 页面渲染前的store处理

    在一般的vue cli项目中 xff0c 我们可以用vuex persistedstate xff0c 它可以使vuex的状态持久化 xff0c 页面刷新都不会丢失 xff0c 原理当然是localStorage啦 xff01 当然也可以使
  • C语言查找字符

    C语言查找字符 相关文章路径 xff1a C语言求字符串的长度 gt C语言字符串的复制 gt C语言的字符串的联接 gt C语言字符串的比较 gt C语言查找字符 gt C语言BF算法 gt C语言输出字符串 gt C语言输入字符串 C
  • CPU、MPU、MCU、SOC的概念和区别

    概念 1 cpu cpu central processing unit 是一台计算机的运算核心和控制核心 xff0c CPU由运算器 控制器和寄存器以及实现他们联系的数据 控制总线构成 xff0c cpu典型的三级流水线操作是取值 译码
  • VScode报错:undefined reference to ‘WinMain’ collect2.exe: error: ld returned 1 exit status

    这是因为vs code并不会你点击了运行后就自动保存 xff0c 需要自己Ctrl 43 s保存一下 没保存显示一个圆点
  • 解决Realsense摄像头插着开机后,需要重新插拔程序才能正常工作

    安装 uhubctl 的过程 span class token function sudo span span class token function apt get span span class token function inst
  • Jetson TX2 刷机

    文章目录 准备工作1 host端 xff08 ubuntu xff09 配置2 连接线3 安装 NVIDIA SDK Manager 开始刷机STEP1STEP2STEP3STEP4 准备工作 1 host端 xff08 ubuntu xf
  • 链表头结点的插入和删除

    看了不少博客 xff0c 大都讲的比较详细到关于链表节点的删除和插入 xff0c 但因为没找到相关的头结点插入和删除的博客 xff0c 所以打算自己写一下方便大家查阅 下面是已经给出的链表的抽象数据结构 然后 然后下面是定义的插入结点的构造
  • gazebo无人机仿真显示:failsafe enabled: no rc

    修改qgc地面站参数 COM RC IN MODE 更改为 34 Joystick No RC Checks 34 这允许操纵杆输入并禁用 RC 输入检查 NAV RCL ACT to 34 Disabled 34 这可确保在没有无线遥控的
  • 力扣77组合(c++)

    力扣77组合 c 43 43 力扣题目链接 思路 这是一道经典的回溯算法题 xff0c 回溯法解决的问题都可以抽象为树形结构 xff08 N叉树 xff09 xff0c 我们可以通过树形结构来理解回溯算法 那么我把组合问题抽象为如下树形结构
  • 我的创作纪念日

    x1f36c 博主介绍 x1f468 x1f393 博主介绍 xff1a 大家好 xff0c 我是 PowerShell xff0c 很高兴认识大家 主攻领域 xff1a 渗透领域 数据通信 通讯安全 web安全 面试分析 x1f389 点
  • IDEA创建一个springboot项目教程(过程中各种报错解决)

    是不是不知道如何创建一个springboot项目 xff1f 是不是创建项目总是失败 xff1f 今天手把手带你创建一个springboot项目 配置maven 我们在创建一个springboot项目时一定要先配好maven配置文件sett
  • PHPWord相关

    phpword中进行换行操作 xff1a re 39 work experience 39 61 str replace array 34 r 34 34 n 34 34 r n 34 34 lt w br gt 34 re 39 work
  • 文件操作fwrite写txt文件乱码怎么办,我这里有方法解决

    很多大一新生到了期末做课设时 xff0c 遇到文件操作 总会有人不明白为什么写入的内容会乱码 先引入一些知识 xff1b 文件有二进制文件 xff0c 文本文件 二进制文件是按内存写入的 xff1b 文本文件是按格式写入的 xff1b 因此