当前位置: 首页 > news >正文

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]&#xff1a;取非换行之前的值。printf("%5d", a):左边补 格式化&#xff1a;有正则在其中。 int main() {printf("%5d\n&quo…...

Revit教程:怎么关掉工具栏的实时提示?

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

javascript 简介

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

医学图象分割常用损失函数(附Pytorch和Keras代码)

对损失函数没有太大的了解&#xff0c;就是知道它很重要&#xff0c;搜集了一些常用的医学图象分割损失函数&#xff0c;学习一下&#xff01; 医学图象分割常见损失函数前言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因子&#xff08;垂直单位与水平单位的比值&#xff09;2. 坡向计算步骤坡度计算的姊妹篇–坡向计算来了 1. 坡向计算中的Z因子&#xff08;垂直单位与水平单位的比值&#xff09; z 因子是一个转换因子&#xff0c;当输入表面的垂直坐标&…...

Redis持久化机制

一、RDB RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫做Redis数据快照。 RDB是Redis默认的持久化机制 - RDB持久化文件&#xff0c;速度比较快&#xff0c;而且存储的是一个二进制的文件&#xff0c;传输起来很方便。 - RD…...

2、VUE面试题

1, 如何让CSS只在当前组件中起作用&#xff1f;在组件中的style前面加上scoped2、<keep-alive></keep-alive>的作用是什么?keep-alive 是 Vue 内置的一个组件&#xff0c;可以使被包含的组件保留状态&#xff0c;或避免重新渲染。3, vue组件中如何获取dom元素?使…...

DeepSort:论文翻译

文章目录摘要1、简介2、利用深度关联度量进行排序2.1、轨迹处理和状态估计2.3、匹配的级联2.4、深度外观描述符3、实验4、结论论文链接&#xff1a;https://arxiv.org/pdf/1703.07402.pdf摘要 简单在线实时跟踪(SORT)是一种实用的多目标跟踪方法&#xff0c;专注于简单、有效的…...

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位编译链接及踩坑

▒ 目录 ▒&#x1f6eb; 问题描述1️⃣ 多版本vs报错指定VS路径2️⃣ error LNK2001: 问题排查通过IDA打开lib文件&#xff0c;确认导出内容查看源码增加参数--editable&#xff0c;重新编译3️⃣ error LNK2001: 外部符号__imp_?close_...去除__imp_&#x1f6ec; 结论vcpkg…...

初始QML

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

SpringAOP切面实例实现对数据过滤返回,SpringAOP切面实现对用户权限控制,通过@Around注解过滤修改方法返回值

文章目录需求内容:实现&#xff1a;步骤一&#xff1a;导入SpringAOP相关依赖pom.xml步骤二&#xff1a;自定义两个注解步骤三&#xff1a;需要用到的实体类**步骤四&#xff1a;切面具体实现**用法1.需要过滤返回值的方法添加注解FilterByUser2.数据Dto在需要过滤的字段添加Fi…...

【Kubernetes】【九】Label,Deployment,Service

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

RuoYi-Vue部署(Nginx+Tomcat)

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

Hive提升篇-Hive修改事务

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

PMP项目管理未来的发展与趋势

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

深度学习算法面试常问问题(三)

pooling层是如何进行反向传播的&#xff1f; average pooling&#xff1a; 在前向传播中&#xff0c;就是把一个patch的值取平均传递给下一层的一个像素。因此&#xff0c;在反向传播中&#xff0c;就是把某个像素的值平均分成n份 分配给上一层。 max pooling&#xff1a; 在前…...

GEE学习笔记 八十七:python版GEE动态加载地图方法

在Google Earth Engine的python版API更新后&#xff0c;之前使用folium动态加载地图的代码就不能在正常运行&#xff0c;因为整个Google Earth Engine的地图加载服务的URL发生了更新&#xff0c;所以我们也需要更新相关绘制方法。下面我会讲解一种新的绘制方法&#xff0c;大家…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...