C语言格式化输入和输出; Format格式化

news2024/12/23 13:38:01

 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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树讲解

对于二叉树&#xff0c;是真正的很难&#xff01;很难&#xff0c;不是一般的难度&#xff01;&#xff01;笔者学习完二叉树&#xff0c;笔记记录了得有三十多页&#xff0c;但是&#xff0c;还是很不理解&#xff08;做题不怎么会&#xff09;下面进入二叉树的基础部分&#…

无法决定博客主题的人必看!如何选择类型和推荐的 5 种选择

是否有人不能迈出第一步&#xff0c;因为博客的类型还没有决定&#xff1f;有些人在出发时应该行动&#xff0c;而不是思考&#xff0c;但让我们冷静下来&#xff0c;仔细想想。博客的难度因流派而异&#xff0c;这在很大程度上决定了随后的发展。因此&#xff0c;在选择博客流…

关于IDM下载器,提示:一个假冒的序列号被用来注册……idea项目文件路径报红

关于IDM下载器&#xff0c;提示&#xff1a;一个假冒的序列号被用来注册……到C:\Windows\System32\drivers\etc 修改目录下面的hosts文件&#xff08;如果没有修改的权限就右键属性hosts文件修改user的权限为完全控制&#xff09;&#xff0c;在hosts里面增加以下内容&#xf…

RadGraph: Extracting Clinical Entities and Relations from Radiology Reports代码

文章来源&#xff1a;NeurIPS 文章类别&#xff1a;IE(Information Extraction) RadGraph主要基于dygie&#xff0c;主要文件为inference.py。 inference.py&#xff1a; 1、get_file_list(data_path) def get_file_list(path):file_list [item for item in glob.glob(f&q…

遮挡贴图(Occlusion Map)和微表面贴图(Microsurface Map)

遮挡贴图&#xff08;Occlusion Map&#xff09; 在3D图形学中&#xff0c;遮挡&#xff08;Occlusion&#xff09;是指光被物体挡住。即便是在PBR中&#xff0c;环境光在某些应该被遮挡的地方&#xff0c;也会以古怪的方式被反射。遮挡贴图&#xff08;Occlusion Map&#xff…

ffmpeg h264文件转mp4

h264文件不能直接在网页上播放&#xff0c;比如在浏览器上输入http://10.0.0.2/2022-01-08T22-32-58.h264&#xff0c;变成了下载。 若在浏览器上输入http://10.0.0.2/2022-01-08T22-32-58.mp4&#xff0c;则可以播放。 本文讲解用ffmpeg将h264文件转换成mp4。 首先&#xf…

视频融合 flv流格式对接(上)

FLV 是FLASH VIDEO的简称&#xff0c;FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快&#xff0c;使得网络观看视频文件成为可能&#xff0c;它的出现有效地解决了视频文件导入Flash后&#xff0c;使导出的SWF文件体积庞大&#xf…

R-Drop: Regularized Dropout for Neural Networks 论文笔记(介绍,模型结构介绍、代码、拓展KL散度等知识)

目录前言一、摘要二、R-Drop介绍三、R-Drop公式详解四、R-Drop计算流程附录0&#xff1a;代码附录一&#xff1a;熵以及信息熵附录二&#xff1a;KL散度&#xff08;相对熵&#xff09;附录三&#xff1a;JS散度附录四&#xff1a;互信息总结前言 R-Drop——神经网络的正则化Dr…

必看!Salesforce管理员职场如何快速晋升?

2023年的开局略显艰难&#xff0c;在当前的经济环境下&#xff0c;许多行业仍面临挑战。虽然交易周期可能会变得更长&#xff0c;但对新的Salesforce实施仍有巨大需求&#xff0c;现有客户仍然需要经验丰富的专业人员来优化和维护他们的Salesforce组织。 在过去的三年中&#x…

大规模即时云渲染技术,追求体验与成本的最佳均衡

现实世界映射其中&#xff0c;传统文化沉浸其境&#xff0c;旧时记忆交互其间。 仲升&#xff5c;技术作者 IMMENSE&#xff5c;内容编辑 在刚刚过温的春节&#xff0c;云之上&#xff0c;带来了一场「数字文化」新体验。 游花车、舞狮子、踩高跷、放烟花、写福字……还记得儿…

2023最强软件测试面试题,精选100 道,内附答案版,冲刺金3银4

精挑细选&#xff0c;整理了100道软件测试面试题&#xff0c;都是非常常见的面试题&#xff0c;篇幅较长&#xff0c;所以只放出了题目&#xff0c;答案在评论区&#xff01; 测试技术面试题 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 2、我现在有…

css复习3

精灵图的使用 为了有效地减少服务器接收和发送请求的次数&#xff0c;提高页面的加载速度&#xff0c;出现了 CSS 精灵技术&#xff08;也称 CSS Sprites、CSS 雪碧&#xff09;。 核心原理&#xff1a;将网页中的一些小背景图像整合到一张大图中 &#xff0c;这样服务器只需要…

新S/MIME标准将于今年九月生效

1月份&#xff0c;行业领导者通过了新的 S/MIME基线要求&#xff0c;旨在规范全球范围内公开信任电子邮件签名证书的颁发和管理。以下是关于此次更新的重点……根据abnormal security发布的报告称&#xff0c;近92%的受访者表示&#xff0c;他们在过去一年中至少经历过一次或多…

全网最全的Ansible中常用模块讲解

目录 前言 一、ansible实现管理的方式 二、Ad-Hoc执行方式中如何获得帮助 三、ansible命令运行方式及常用参数 四、ansible的基本颜色代表信 五、ansible中的常用模块 1、command 2、shell 3、script 4、copy 5、fetch 6、file 7、 unarchive 8、archive 9、h…

Python基础1

1. 注释 单行注释&#xff1a;以#开头。一般建议注释和内容用空格隔开。 多行注释&#xff1a;以一对三个双引号括起来的内容是注释。“““示例注释”””。 2. 数据类型 验证数据类型的方法&#xff1a;type&#xff08;被查看类型的数据&#xff09;。 注意&#xff1a;…

< 每日小技巧:N个很棒的 Vue 开发技巧, 持续记录ing >

每日小技巧&#xff1a;6 个很棒的 Vue 开发技巧&#x1f449; ① Watch 妙用> watch的高级使用> 一个监听器触发多个方法> watch 监听多个变量&#x1f449; ② 自定义事件 $emit() 和 事件参数 $event&#x1f449; ③ 监听组件生命周期常规写法hook写法&#x1f44…

扫码过磅+车牌识别,内蒙古蒙维过磅实现信息化管理

扫码过磅、车牌识别、对接SAP ERP系统设计思路&#xff1a; 无人值守系统升级改造包括车牌自动识别系统、信息化&#xff08;扫码等方式&#xff09;管理系统、智能自动控制系统等实现信息无纸化传递。远程监管地点设于公司东磅房&#xff0c;可以实现远程监测监控画面、称重过…

前端之HTML

一、概念1.页面组成结构&#xff1a;HTML&#xff08;Hyper Text Markup Language--超文本标记语言&#xff09;页面原始和内容 表现&#xff1a;CSS网页原始的外观和位置等页面样式&#xff08;如颜色、大小等&#xff09; 行为&#xff1a;JavaScript网页模型的定义与交互&am…

【仓库管理】搭建 Maven 私服之一--Nexus仓库(Repository)管理软件

文章目录Nexus是什么Nexus下载和安装1. 进入 Nexus 2.x 下载页面&#xff0c;根据本机操作系统&#xff0c;选择对应的版本进行下载&#xff0c;如下图所示。2. 将下载 Nexus 安装包解压到本地磁盘&#xff0c;可获得 nexus-2.14.20-02 和 sonatype-work 2 个目录&#xff0c;如…

Python3,2分钟掌握Doscoart库,你也能成为艺术家。

2行代码绘制水彩画1、引言2、 代码实战2.1 模块介绍2.2 模块安装2.3 代码示例2.3.1 创建默认图片2.3.2 设置参数创建图片2.3.3 查看设置参数2.3.4 查看配置2.3.5 保存配置2.3.6 加载配置2.3.7 导出配置文件2.3.7 生成Python代码2.3.8 调用文档3、总结1、引言 小屌丝&#xff1…