C语言格式化输入和输出; Format格式化
Format格式化
%1s或者%2s,%3s:取字符串的前1,2或者3位。%*c:屏蔽一个字符。%[A-Z]:取一个A到Z的值。
%[^a-z]:不取a到z的值。
%[^\n]:取非换行之前的值。printf("%5d", a):左边补
格式化:有正则在其中。
int main()
{printf("===%5d===\n", 239);printf("===%05d===\n", 239);printf("===%0-5d===\n", 239);printf("===%-5d===\n", 239);printf("===%.5d===\n", 239);printf("===%d\t===\n", 239);printf("===%u===\n", 239);printf("===%o===\n", 239);getchar();return 0;
}
输出:
=== 239===
===00239===
===239 ===
===239 ===
===00239===
===239 ===
===239===
===357===
字符串的标准输入和输出
int scanf(const char* restrict format, ...)
int a, b;
scanf("%d %d", &a, &b)
int printf(const char* format, ...);
int a = 10;
int b = 20;
char* str = "asdfgh";
printf("a = %d, b = %d, str = %s", a, b, str)
sprintf(char* str, const char* format, ...):字符串拼接数值等不同类型。
- 功能:根据参数 format 字符串来转换并格式化数据,然后将结果输出到str指定的空间中,直到出现字符串结束符'\0'为止。
- 参数:
- str:输出字符串首地址。
- format:字符串格式,用法和printf()一样。
- 返回值:
- 成功:
- 失败:-1
int a, b, value;
char c;
char str[20] = {0};
sprintf(str, "%d %c %d = %d", a, c, b, value);
sscanf(const char *str, const char* format, ...):把值从字符串中提取出来。
- 功能:从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据。
- 参数:
- str:指定的字符串首地址。
- format:字符串格式,用法和scanf()一样。
- 返回值:
- 成功:参数数目,成功转换的值的个数。
- 失败:-1
char src[] = "a = 10, b = 20";
int a;
int b;
sscanf(src, "a = %d, b = %d", &a, &b);
printf("a:%d, b:%d\n", a, b);
格式化文件读写
int fprintf(FILE* stream, const char* format, ...);写文件。
- 功能:根据参数format字符串来转换并格式化数据,然后将结果输出到stream指定的文件中,指定出现字符串结束符'\0'为止。
- 参数:
- stream:已经打开的文件
- format:字符串格式,用法和printf()一样
- 返回值:
- 成功:
- 失败:-1
int a = 10;
int b = 20;
fprintf(fp, "%d + %d = %d", a, b, a + b);
int fscanf(FILE* stream, const char* format, ...);读文件。
- 功能:从stream指定的文件读取字符串,并根据参数format字符串来转换并格式化数据。
- 参数:
- stream:已经打开的文件。
- format:字符串格式,用法和scanf()一样。
- 返回值:
- 成功:参数数目,成功转换的值的个数。
- 失败:-1。
int a, b, c;
fscanf(fp, "%d %d %d\n", &a, &b, &c);
printf("a = %d, b = %d, c = %d\n", a, b, c);
11+22=
16-12=
17*18=
96/6=
32+47=
56/7=
89*2=
33-10=
32/8=
99/10=
自己初次编写:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>char ArithmeticOperations[4] = { '+','-', '*', '/' };char GetOperater(char* p)
{for (int i = 0; i < 4; i++){char* op = strchr(p, ArithmeticOperations[i]);if (op != NULL){return *op;break;}}
}int GetResult(int num1, int num2, char op)
{int result = 0;switch (op){case '+':result = num1 + num2;break;case '-':result = num1 - num2;break;case '*':result = num1 * num2;break;case '/':result = num1 / num2;break;default:break;}return result;
}
int main()
{FILE *fpr = fopen("F:/Practice/homework", "r");if (!fpr){printf("文件读取失败。");return -1;}char buf[20] = { 0 };char* str[10];for (int i = 0; i < 10; i++){str[i] = (char*)malloc(sizeof(char) * 20);}int i = 0;while (!feof(fpr)){memset(buf, 0, sizeof(buf)); // 防止前一次的赋值,污染本次赋值。char* p = fgets(buf, sizeof(buf), fpr);if (p != NULL && str[i] != NULL){//printf("读取结果:%s\n", p);memcpy(str[i], p, 20);i++;}}fclose(fpr);int LineNum = i;FILE* fpw = fopen("F:/Practice/homework", "w");if (fpw == NULL){perror("fpw open.");return -1;}i = 0;//for (i = 0; i < LineNum; i++)//{// printf("%s", str[i]);//}while (i<LineNum){char op = GetOperater(str[i]);int num1 = atoi(str[i]); // 此处提取符号和数字可以通过sscanf来优化。格式化字符串。int num2 = atoi(strchr(str[i], op)+1); // 指针加1。int result = GetResult(num1, num2, op);char str2[30] = { 0 };sprintf(str2, "%d%c%d%c%d\n", num1, op, num2, '=', result);printf("%s\n", str2);int a = fputs(str2, fpw);if (!a){i++;}}for (int i = 0; i < 10; i++){free(str[i]); // 指针释放,需要添加,str[i] = NULL;}fclose(fpw);getchar();return 0;
}
二次改写
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{FILE* fpr = fopen("F:/Practice/a.txt", "r");if (!fpr){return -1;}char** buf = (char**)malloc(sizeof(char*) * 100);int a, b;char c;float value;for (int i = 0; i < 10; i++){buf[i] = (char *)malloc(sizeof(char) * 20);fgets(buf[i], 20, fpr);//fscanf(fpr, "%d%c%d=", a, c, b);}//fclose(fpr);if (fclose(fpr) != 0) // 更正式的关闭方式。{printf("Error in closing file. \n");exit(EXIT_FAILURE);}FILE* fpw; // 第二种打开文件的方式。if ((fpw = fopen("F:/Practice/a.txt", "w")) == NULL){fprintf(stdout, "Can't open file.\n");exit(EXIT_FAILURE);}for (int i = 0; i < 10; i++){sscanf(buf[i], "%d%c%d=\n", &a, &c, &b);switch (c){case '+':value = a + b;break;case '-':value = a - b;break;case '*':value = a * b;break;case '/':value = a * 1.0 / b;break;default:break;}fprintf(fpw, "%d%c%d=%.2f\n", a, c, b, value);}if (fclose(fpw) != 0) // 更正式的关闭方式。{printf("Error in closing file. \n");exit(EXIT_FAILURE);}for (int i = 0; i < 10; i++){free(buf[i]);buf[i] = NULL;}free(buf);getchar();return 0;
}
基于结构体的写法:已经很有面向对象类的感觉了
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct opter
{int a;int b;char c;float value;
};typedef struct opter opt;int main(int argc, char* argv[])
{opt* p = (opt*)malloc(sizeof(opt) * 10);FILE* fpr = fopen("F:/Practice/a.txt", "r");if (fpr == NULL)return -1;for (int i = 0; i < 10; i++){// 要么是指针写法->,要么是结构体的点。fscanf(fpr, "%d%c%d=\n", &((p+i)->a), &p[i].c, &p[i].b); // 用->必须写上括号。switch (p[i].c){case '+':p[i].value = p[i].a + p[i].b;break;case '-':p[i].value = p[i].a - p[i].b;break;case '*':p[i].value = p[i].a * p[i].b;break;case '/':p[i].value = p[i].a * 1.0 / p[i].b;break;default:break;}}fclose(fpr);//FILE fpw = fopen("F:/Practice/a.txt", "w");fpr = fopen("F:/Practice/a.txt", "w"); // 要么重新建立一个变量fpw, 要么继续用原来这个fpr。if (!fpr){return -1;}for (int i = 0; i < 10; i++){fprintf(fpr, "%d%c%d=%.2f\n", p[i].a, p[i].c, p[i].b, p[i].value);}fclose(fpr);free(p);p = NULL;getchar();return 0;
}
两个文件先后处理
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>int main(int argc, char* argv[])
{FILE* fpr = fopen("F:/Practice/a.txt", "r");FILE* fpw = fopen("F:/Practice/b.txt", "w");if (!fpr || !fpw){return -1;}int a, c, d;char b;fscanf(fpr, "%d%c%d=%d", &a, &b, &c, &d);printf("a = %d, b = %c, c = %d, d = %d", a, b, c, d);fprintf(fpw, "%d %c %d = %d", a, b, c, d);fclose(fpr);fclose(fpw);getchar();return 0;
}
字符串拼接与分割。
int main013()
{char str[] = "相遇在2021";char str2[4];int a;sscanf(str, "%6s%d", str2, &a); // 一个汉字占用两个字符。printf("str2 = %s, a = %d\n", str2, a);getchar();return 0;
}
相关文章:

C语言格式化输入和输出; Format格式化
Format格式化 %1s或者%2s,%3s:取字符串的前1,2或者3位。%*c:屏蔽一个字符。%[A-Z]:取一个A到Z的值。 %[^a-z]:不取a到z的值。 %[^\n]:取非换行之前的值。printf("%5d", a):左边补 格式化:有正则在其中。 int main() {printf("%5d\n&quo…...

Revit教程:怎么关掉工具栏的实时提示?
一、Revit中如何关闭工具栏的实时帮助提示 如图1所示,Revit会对每一个命令有一个简单的图文说明,方便不熟悉软件的用户使用。对于已经熟悉软件的用户,会觉得鼠标在菜单上悬停时弹出的实时帮助页面很干扰使用,而且很占内存资源&…...

javascript 简介
JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。JavaScript 是脚本语言JavaScript 是一种轻量级的编程语言。JavaScript 是可插入 HTML 页面的编程代码。JavaScript…...

医学图象分割常用损失函数(附Pytorch和Keras代码)
对损失函数没有太大的了解,就是知道它很重要,搜集了一些常用的医学图象分割损失函数,学习一下! 医学图象分割常见损失函数前言1 Dice Loss2 BCE-Dice Loss3 Jaccard/Intersection over Union (IoU) Loss4 Focal Loss5 Tvesky Loss…...
【新2023】华为OD机试 - 病菌感染(Python)
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 病菌感染 题目 在一个地图中(地图有N*N个区域组成) 有部分区域被感染病菌 感染区域每天都会把周围上下左右的四个区域感染 请根据给定的地图计算多少天以后全部区域都会被感染 如果初始地图上所有区域都…...

QGIS中进行批量坡向计算
QGIS中进行坡向计算1. 坡向计算中的Z因子(垂直单位与水平单位的比值)2. 坡向计算步骤坡度计算的姊妹篇–坡向计算来了 1. 坡向计算中的Z因子(垂直单位与水平单位的比值) z 因子是一个转换因子,当输入表面的垂直坐标&…...
Redis持久化机制
一、RDB RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。 RDB是Redis默认的持久化机制 - RDB持久化文件,速度比较快,而且存储的是一个二进制的文件,传输起来很方便。 - RD…...
2、VUE面试题
1, 如何让CSS只在当前组件中起作用?在组件中的style前面加上scoped2、<keep-alive></keep-alive>的作用是什么?keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。3, vue组件中如何获取dom元素?使…...

DeepSort:论文翻译
文章目录摘要1、简介2、利用深度关联度量进行排序2.1、轨迹处理和状态估计2.3、匹配的级联2.4、深度外观描述符3、实验4、结论论文链接:https://arxiv.org/pdf/1703.07402.pdf摘要 简单在线实时跟踪(SORT)是一种实用的多目标跟踪方法,专注于简单、有效的…...
Debezium系列之:重置Sqlserver数据库的LSN拉取历史数据
Debezium系列之:重置Sqlserver数据库的LSN拉取历史数据 一、需求背景二、理解LSN三、sqlserver offset数据样式四、写入历史LSN五、观察历史数据六、拉取最新数据一、需求背景 需要重新拉取sqlserver数据库采集表的历史数据或者connector故障,从指定LSN处拉取历史数据二、理解…...
一起Talk Android吧(第四百九十四回:在Android中使用MQTT通信四)
文章目录 问题概述解决办法经验总结各位看官们大家好,这一回中咱们说的例子是" 在Android中使用MQTT通信四",本章回内容与前后章节内容无关联。闲话休提,言归正转,让我们一起Talk Android吧! 问题概述 我们在很早之前介绍过MQTT的用法,本章回是在原来的基础上…...

【vcpkg】cpprestsdk之64位编译链接及踩坑
▒ 目录 ▒🛫 问题描述1️⃣ 多版本vs报错指定VS路径2️⃣ error LNK2001: 问题排查通过IDA打开lib文件,确认导出内容查看源码增加参数--editable,重新编译3️⃣ error LNK2001: 外部符号__imp_?close_...去除__imp_🛬 结论vcpkg…...

初始QML
Qt Quick的介绍 : Qt Quick是QML的标准类型和功能库。它包括视觉类型,交互类型,动画,模型和视图,粒子效果和着色器效果。QML 应用程序开发人员可以通过单个导入语句访问所有这些功能,简单来说Qt Quick是一…...

SpringAOP切面实例实现对数据过滤返回,SpringAOP切面实现对用户权限控制,通过@Around注解过滤修改方法返回值
文章目录需求内容:实现:步骤一:导入SpringAOP相关依赖pom.xml步骤二:自定义两个注解步骤三:需要用到的实体类**步骤四:切面具体实现**用法1.需要过滤返回值的方法添加注解FilterByUser2.数据Dto在需要过滤的字段添加Fi…...

【Kubernetes】【九】Label,Deployment,Service
Label Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。 Label的特点: 一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等等一个资源对象可以定义任意数量的L…...

RuoYi-Vue部署(Nginx+Tomcat)
环境搭建RuoYi-Vue搭建、Linux安装Nginx、Linux安装JDK8、Linux安装MySql8、Linux安装Redis、Linux安装Tomcat9前端打包 1.ruoyi-ui鼠标右键-->打开于终端2.安装依赖:npm install --registryhttps://registry.npm.taobao.org-->node_modules3.编译打包&#x…...

Hive提升篇-Hive修改事务
简介 Hive 默认是不允许数据更新操作的,毕竟它不擅长,即使在0.14版本后,做一些额外的配置便可开启Hive数据更新操作。而在海量数据场景下做update、delete之类的行级数据操作时,效率并不如意。 简单使用 修改HIVE_HOME/conf/hi…...

PMP项目管理未来的发展与趋势
什么是项目管理?关于项目管理的解释主要是基于国际项目管理三大体系不同的解释及本领域权威专家的解释。 项目管理就是以项目为对象的系统管理方法,通过一个临时性的、专门的柔性组织,对项目进行高效率的计划、组织、指导和控制,以…...

深度学习算法面试常问问题(三)
pooling层是如何进行反向传播的? average pooling: 在前向传播中,就是把一个patch的值取平均传递给下一层的一个像素。因此,在反向传播中,就是把某个像素的值平均分成n份 分配给上一层。 max pooling: 在前…...

GEE学习笔记 八十七:python版GEE动态加载地图方法
在Google Earth Engine的python版API更新后,之前使用folium动态加载地图的代码就不能在正常运行,因为整个Google Earth Engine的地图加载服务的URL发生了更新,所以我们也需要更新相关绘制方法。下面我会讲解一种新的绘制方法,大家…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...