c语言abc 08 0,C语言格式化输出 - osc_oq0m8kxk的个人空间 - OSCHINA - 中文开源技术交流社区...

本文主要是介绍c语言abc 08 0,C语言格式化输出 - osc_oq0m8kxk的个人空间 - OSCHINA - 中文开源技术交流社区...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、格式化输出

格式化输出的函数有printf、sprintf和snprintf等,功能略有不同,使用方法大同小异,本章节我们先以printf为例。

对于 printf 函数,相信大家并不陌生。之所以称它为格式化输出函数,该函数的声名如下:

int printf(const char *format, ...)

大家看到printf函数的声明就会有点懵,它参数的写法与我们之前学到的函数知识不一样,printf函数是一个“可变参数函数”(即函数参数的个数是可变的),可变参数函数的知识以后再介绍,现在只要知道怎么使用就行了。

printf函数的参数的个数和类型都是可变的,每一个参数的输出格式都有对应的格式说明符与之对应,从格式串的左端第1 个格式说明符对应第 1 个输出参数,第 2 个格式说明符对应第 2 个输出参数,第 3个格式说明符对应第 3 个输出参数,以此类推。

其中,格式说明符的形式如下(方括号 [] 中的项为可选项):

%[flags][width][.prec] type

1、类型符(type)

它用以表示输出数据的类型,以下是常用类型的汇总,不常用的就不列了。

%hd、%d、%ld 以十进制、有符号的形式输出 short、int、long 类型的整数。

%hu、%u、%lu 以十进制、无符号的形式输出 short、int、long 类型的整数

%c 输出字符。

%lf 以普通方式输出double(float弃用,long doube无用)。

%e 以科学计数法输出double。

%s 输出字符串。

以上输出数据的知识在之前介绍数据类型的时候已演示过,这里就不举例了。

2、宽度(width)

它用于控制输出内容的宽度。

printf("=%12s=\n","abc"); // 输出= abc=

printf("=%12d=\n",123); // 输出= 123=

printf("=%12lf=\n",123.5); // 输出= 123.500000=

3、对齐标志(flags)

flags它用于控制输出内容的对齐方式。

不填或+:输出的内容右对齐,这是缺省的方式,上一小节就是右对齐的示例。

-:输出的内容左对齐。

printf("=%-12s=\n","abc"); // 输出=abc =

printf("=%-12d=\n",123); // 输出=123 =

printf("=%-12f=\n",123.5); // 输出=123.500000 =

如果输出的内容是整数或浮点数,并且对齐的方式是右对齐,可以加0填充,例如:

printf("=%012s=\n","abc"); // 输出= abc=

printf("=%012d=\n",123); // 输出=000000000123=

printf("=%012f=\n",123.5); // 输出=00123.500000=

从上面第一行代码的结果看出,输出的内容不是整数或浮点数,是字符串,不能在前面填0。

左对齐的时候,能在整数或浮点数的后面补0吗?浮点数最多可以补到6位,整数不行,为什么?您的存款能在后面补0吗?

4、精度(prec)

如果输出的内容是浮点数,它用于控制输出内容的精度,也就是说小数点后面保留多少位,后面的数四舍五入。

printf("=%12.2lf=\n",123.5); // 输出= 123.50=

printf("=%.2lf=\n",123.5); // 输出=123.50=

printf("=%12.2e=\n",123500000000.0); // 输出= 1.24e+11=

printf("=%.2e=\n",123500000000.0); // 输出=1.24e+11=

二、格式化输出到字符串

int printf(const char *format, ...);

int sprintf(char *str, const char *format, ...);

int snprintf(char *str, size_t size, const char *format, ...);

功能:printf是把结果输出到屏幕,sprintf把格式化输出的内容保存到字符串str中,snprintf的n类似于strncpy中的n,意思是只获取输出结果的前n-1个字符,不是n个字符。

在之前的章节中,介绍过把字符串转换为整数和浮点数据的库函数,C语言没有提供把整数和浮点数据转换为字符串的库函数,而是采用sprintf和snprintf函数格式化输出到字符串。

示例(book98.c)

/*

* 程序名:book98.c,此程序演示格式化输出sprintf和snprintf函数。

* 作者:C语言技术网(www.freecplus.net) 日期:20190525

*/

#include

#include

int main()

{

char str[301];

// 格式化输出到str中

sprintf(str,"%d,%c,%f,%s",10,'A',25.97,"一共输入了三个数。");

printf("%s\n",str);

// 格式化输出到str中,只截取前7个字符

snprintf(str,8,"%d,%c,%f,%s",10,'A',25.97,"一共输入了三个数。");

printf("%s\n",str);

}

运行结果

3f8d992346a3e9d1f8a88800d9d955f2.png

程序运行第二行只输出了6个字符,注意,snprintf函数在unix和windows平台下的表现略有不同,在windows平台下,第二行会输出7个字符。

三、C语言代码的多行书写

在我们之前学习的过程中,编写的程序的功能很简单,一句代码很短,但是在实际开发中,参数往往很长很多,一句代码可能会很长,需要用多行才能书写。

如果我们在一行代码的行尾放置一个反斜杠,c语言编译器会忽略行尾的换行符,而把下一行的内容也算作是本行的内容。这里反斜杠起到了续行的作用。

strcpy(str,"aaaaaaaaaa\

bbbbbbbbb);

如果我们不使用反斜杠,当我们试图初始化一个跨多行的字符串时,c语言编译器可能会发出警告或错误,如下面的语句是不正确的。

strcpy(str,"aaaaaaaaaa

bbbbbbbbb);

C语言中还有字符串多行书写的方法,那就是将它写个多个字符串,C语言编译器会自动将这些字符串连接起来,如下:

strcpy(str,"aaabbbccc");

printf("str=%s=\n",str); // 输出str=aaabbbccc=

strcpy(str,"aaa""bbb""ccc");

printf("str=%s=\n",str); // 输出str=aaabbbccc=

strcpy(str,"aaa"\

"bbb"\

"ccc");

printf("str=%s=\n",str); // 输出str=aaabbbccc=

sprintf(str,"aaabbbccc");

printf("str=%s=\n",str); // 输出str=aaabbbccc=

sprintf(str,"aaa""bbb""ccc");

printf("str=%s=\n",str); // 输出str=aaabbbccc=

sprintf(str,"aaa"\

"bbb"\

"ccc");

printf("str=%s=\n",str); // 输出str=aaabbbccc=

以上每段代码的输出结果完全一样,表达式:"aaa" "bbb" "ccc" 实际上相当于"aaabbbccc"。

把字符串很长,参数很多的代码用多行书写,可以使程序代码结构更清晰,以下代码是我实际开发中用到的一句代码,这还不算长的。

0d57ad51cc5f42946210f291a8f2245d.png

四、课后作业

1)编写示例程序,把本章节介绍的知识点全部演示一遍,用程序演示可以加深您的理解和映象。

2)编写一个解析XML字符串的函数。

函数声明:

int GetXMLBuffer(const char *in_XMLBuffer,const char *in_FieldName,char *out_Value);

in_XMLBuffer,XML格式的字符串,如下:

西施18火辣漂亮

in_FieldName,字段的标签名。

out_Value,获取内容存放的变量的指针。

返回值,0-成功,-1-失败。

调用示例:

char strXMLBuffer[1024];

strcpy(strXMLBuffer," 西施18火辣漂亮");

char strvalue[51];

GetXMLBuffer(strXMLBuffer,"name",strvalue); // strvalue的内容将是"西施"

GetXMLBuffer(strXMLBuffer,"age",strvalue); // strvalue的内容将是"18"

GetXMLBuffer(strXMLBuffer,"sc",strvalue); // strvalue的内容将是"火辣"

GetXMLBuffer(strXMLBuffer,"yz",strvalue); // strvalue的内容将是"漂亮"

五、版权声明

C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

来源:C语言技术网(www.freecplus.net)

作者:码农有道

如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发我的文章,谢谢!!!

如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

这篇关于c语言abc 08 0,C语言格式化输出 - osc_oq0m8kxk的个人空间 - OSCHINA - 中文开源技术交流社区...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/346787

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”