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发生了更新,所以我们也需要更新相关绘制方法。下面我会讲解一种新的绘制方法,大家…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...