C语言学习【printf函数和scanf函数】

C语言学习【printf函数和scanf函数】

printf()函数和scanf()函数可以让用户与程序交流,是输入/输出函数

printf()函数

请求printf()函数打印数据的指令要与待打印数据的类型相匹配。例如,打印整数时使用%d,打印字符时使用%c。这些符号被称为转换说明(conversion specification),它们指定了如何把数据转换成可显示的形式

如下图所属我i欸转换说明及其打印的输出结果

/* 使用转换说明 */
#include "stdio.h"
#define PI 3.1415926int main(void)
{int number = 7;float pies = 12.75;int cost = 7800;printf("The %d contestants ate %f berry pies.\n", number, pies);printf("The value of pi is %f.\n", PI);printf("Farewell! thou art too dear for my possessing, \n");printf("%c%d\n", '$', 2 * cost);
}

程序运行结果

The 7 contestants ate 12.750000 berry pies. 
The value of pi is 3.141593.
Farewell! thou art too dear for my possessing, 
$15600

printf()函数格式为

printf(格式字符串, 待打印项 1, 待打印项 2,...);

printf()输出百分号:使用两个%即可

/* printf 输出 % */
#include "stdio.h"int main(void)
{int radio = 12;printf("%d%%", radio);
}

程序运行结果

12%

printf()的转换说明修饰符

下图所示为printf()的修饰符

printf()中的标记

使用修饰符和标记的示例程序(字段宽度打印输出整数时的效果)

/* 字段宽度 */
#include "stdio.h"#define PAGES 959int main(void)
{printf("*%d*\n", PAGES);printf("*%2d*\n", PAGES);printf("*%10d*\n", PAGES);printf("*%-10d*\n", PAGES);}

程序运行结果

*959*
*959*
*       959*
*959       *

第一个转换说明%d不带任何修饰符,其对应输出结果与带整数字段宽度的转换说明的输出结果相同;
第二个转换说明是%2d,其对应的输出结果应该该是2字段度。因为待打印的整数有3位数字,所以字段宽度自动扩大以符合整数的长度;
第3个转换说明是%10d,其对应的输出结果有10个空格宽度,实际上在两个星号之间有7个空格和3位数字,并且数字位于字段的右侧;
最后一个转换说明是%-10d,其对应的输出结果同样是10个空格宽度,-标记说明打印的数字位于字段的左侧.

浮点型格式效果

/* 一些浮点型修饰符的组合 *//* 一些浮点型修饰符的组合 */#include "stdio.h"int main(void)
{const double RENT = 3852.99;     /* const 常量 */printf("*%f*\n", RENT);                  /* 字段宽度和小数点文书均为系统默认 小数点后打印6位数字 */printf("*%e*\n", RENT);                  /* %e 编译器在小数点左侧打印一个数字 小数点右侧打印6个数字 */printf("*%4.2f*\n", RENT);               /* */printf("*%3.1f*\n", RENT);printf("*%10.3f*\n", RENT);printf("*%10.3E*\n", RENT);printf("*%+4.2f*\n", RENT);              /* +代数标记 */printf("*%010.2f*\n", RENT);             /* 补齐方式 */
}

程序运行结果

*3852.990000*  
*3.852990e+003*
*3852.99*
*3853.0*
*  3852.990*
*3.853E+003*
*+3852.99*
*0003852.99*

其他组合

/* 演示一些格式标记 */#include "stdio.h"int main(void)
{printf("%x %X %#x\n", 31, 31, 31);printf("**%d**% d**% d**\n", 42, 42, -42);printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);}

程序运行结果

1f 1F 0x1f
**42** 42**-42**
**    6**  006**00006**  006**

第1行输出中,1f是十六进制数,等于十进制数31,第1行 printf()语句中,根据%x打印出1f%F打印出1F%#x打印出0x1f
第 2 行输出演示了如何在转换说明中用空格在输出的正值前面生成前导空格,负值前面不产生前导空格。这样的输出结果比较美观,因为打印出来的正值和负值在相同字段宽度下的有效数字位数相同;
第 3 行输出演示了如何在整型格式中使用精度(%5.3d)生成足够的前导 0 以满足最小位数的要求(本例是 3)。然而,使用 0 标记会使得编译器用前导 0 填充满整个字段宽度。最后,如果 0 标记和精度一起出现,0 标记会被忽略。

字符串格式的示例

/* 字符串格式 */#include "stdio.h"#define BLURB "Authentic imitation!"int main(void)
{printf("[%2s]\n", BLURB);printf("[%24s]\n", BLURB);printf("[%24.5s]\n", BLURB);printf("[%-24.5s]\n", BLURB);
}

程序运行结果

[Authentic imitation!]    
[    Authentic imitation!]
[                   Authe]
[Authe                   ]

-标记使得文本左对齐输出.

转换(conversion)说明的意义

76在计算机内部的存储格式为二进制数0100 1100%d转换说明将其转换成字符76,并显示为76%x转换说明把相同的值0100 1100转化成十六进制计数法4c%c转换说明把0100 1100转换成字符L

转换说明应该与待答应值得类型相匹配

以下是一些不匹配的整型转换示例

/* 一些不匹配的整型转换 */
#include "stdio.h"#define PAGES 336
#define WORDS 65618int main(void)
{short num = PAGES;short mnum = -PAGES;printf("num as short and unsigned short: %hd %hu\n", num, num);printf("-num as short and unsigned short: %hd %hu\n", mnum, mnum);printf("num as int and char: %d %c\n", num, num);printf("WORDS as int, short, and char: %d %hd %c\n", WORDS, WORDS, WORDS);}

程序运行结果

num as short and unsigned short: 336 336
-num as short and unsigned short: -336 65200
num as int and char: 336 P
WORDS as int, short, and char: 65618 82 R

%u表示无符号;
short int的大小是2字节;系统采用二进制补码来表示有符号整数;数字0~32767代表它们本身,而32768~65535则表示负数,其中65535表示-1,依此类推.

当 printf()使用%c 打印 336 时,它只会查看储存 336 的 2 字节中的后 1 字节
用%hd 转换说明打印时,printf()只使用最后 2 个字节


混淆整型和浮点型

/* 不匹配的浮点型转换 */#include "stdio.h"int main(void)
{float n1 = 3.0;double n2 = 3.0;long n3 = 2000000000;long n4 = 1234567890;printf("%.1e %.1e %.1e %.1e\n", n1, n2, n3, n4);printf("%ld %ld\n", n3, n4);printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);}

程序运行结果

3.0e+000 3.0e+000 9.9e-315 6.1e-315
2000000000 1234567890
0 0 2000000000 1234567890

第1 行输出显示,%e转换说明没有把整数转换成浮点数;
float 类型的值作为 printf()参数时会被转换成 double 类型。
在本系统中,float 是 4 字节,但是为了 printf()能正确地显示该值,n1 被扩成 8 字节

参数传递

栈(stack)

printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);

n1 被储存在栈中,占 8 字节(float 类型被转换成 double 类型)。同样,n2 也在栈中占 8 字节,而 n3 和 n4 在栈中分别占 4 字节;
%ld 转换说明表明 printf()应该读取 4 字节

printf()函数的返回值

printf()函数也有一个返回值,它返回打印字符的个数。如果有输出错误,printf()则返回一个负值

/* printf()的返回值 */#include "stdio.h"int main(void)
{int bph2o = 212;int rv;rv  =printf("%d F is water's boiling point.\n", bph2o);printf("The printf() function printed %d characrters.\n", rv);return 0;
}

程序运行结果

212 F is water's boiling point.
The printf() function printed 32 characrters.

在字符串中,可以使用\n 来表示换行字符,但是不能通
过按下 Enter(或 Return)键产生实际的换行符。

打印较长字符串的方法

/* 打印较长字符串 */#include "stdio.h"int main(void)
{printf("Here's one way to print a ");printf("long string.\n");printf("Here's another way to print a \long string.\n");printf("Here's the newest way to print a ""long string.\n");        /* ANSI C */return 0;
}

程序运行结果

Here's one way to print a long string.        
Here's another way to print a     long string.
Here's the newest way to print a long string. 

示例二

/* 打印较长字符串 */#include "stdio.h"int main(void)
{printf("Hello, young lovers, wherever you are.\n");printf("Hello, young"    " lovers" ", wherever you are.\n");printf("Hello, young lovers" ", wherever you are.");}

程序运行结果

Hello, young lovers, wherever you are.
Hello, young lovers, wherever you are.
Hello, young lovers, wherever you are.

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

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

相关文章

程序在银河麒麟系统下实现开机自启及创建桌面快捷方式

目录 1. 机器环境说明 2. 程序开机自启动设置 2.桌面快捷方式设置 3. 附加说明 1. 机器环境说明 机器安装的银河麒麟操作系统属性如下: 2. 程序开机自启动设置 第1步:编写一个脚本,用于自动化启动,为便于后文描述,该脚本名称…

干货教程【软件篇】| 免费实现游戏加速自由

需要这个游戏加速软件的小伙伴可以关注一下文章底部公众号,回复关键词【zdjs】即可获取。 该软件可以实现免费的游戏加速,实测延迟低体验好! 建议看到后赶紧保存下来防止丢失! 下面讲一下该软件安装流程~ 通过链接可以得到下面…

Linux进程控制——Linux进程程序替换

前言:Linux进程控制包含了进程终止,进程等待,进程程序替换。走到现在我们也只剩下进程程序替换没介绍了,那么让我们来看看进程程序替换到底是什么! 本篇主要内容: 替换原理 替换函数 实现简易shell 我们所创…

Broad Learning System (BLS) 宽度学习系统

宽度学习(Broad Learning System, BLS)是一种有效的神经网络学习框架,旨在通过扩展网络的宽度而不是深度来提高学习能力和效率。与传统的深度学习相比,宽度学习通过堆叠多层特征节点和增强节点来构建网络,从而避免了深…

Maven依赖管理项目构建

Maven依赖管理项目构建工具 目录 文章目录 Maven依赖管理项目构建工具目录一、Maven简介1、为什么学习Maven1.1、Maven是一个依赖管理工具1.2、Maven是一个构建工具1.3、结论 2. Maven介绍3. Maven软件工作原理模型图(了解) 二、Maven安装和配置1. Mave…

PostgreSQL扩展之PGroonga:多语言全文搜索

简介 PGroonga 是一个 PostgreSQL 扩展,它增加了基于 Groonga 的全文搜索索引方法。虽然原生的 PostgreSQL 支持全文索引,但它仅限于基于字母和数字的语言。PGroonga 提供了更广泛的字符支持,使其成为 PostgreSQL 支持的语言的超集&#xff…

(实测验证)Gitee代码托管尝试(一)——克隆/下载

一、登录 Gitee(码云)代码托管平台: Gitee - 基于 Git 的代码托管和研发协作平台 新建个人账户如下: 二、SSH 公钥设置 1、在git安装目录打开“git-cmd.exe”; 2、通过命令 ssh-keygen 生成 SSH Key: ssh-keygen …

Linux进程概念总结

这里总结下Linux进程概念总结❗ 冯诺依曼: CPU 运算器与控制器RAM 内存(存储器)Cache 缓存(一种技术)不属于冯诺依曼体系结构。ROM 磁盘(输入输出设备)磁盘 既可以从硬盘读取数据也可以向硬盘…

3-3 基于RYU的流量风暴事件原理与响应策略

在传统网络中,存在着一定的广播流量,占据了一部分的网络带宽。同时,在有环的拓扑中,如果不运行某些协议,广播数据还会引起网络风暴,使网络瘫痪。 如有以下的一个网络拓扑结构(3_2_topoplus.py) …

es 分词器(五)之elasticsearch-analysis-jieba 8.7.0

es 分词器(五)之elasticsearch-analysis-jieba 8.7.0 今天咱们就来讲一下es jieba 8.7.0 分词器的实现,以及8.x其它版本的实现方式,如果想直接使用es 结巴8.x版本,请直接修改pom文件的elasticsearch.version版本号即可…

再谈毕业论文设计投机取巧之IVR自动语音服务系统设计(信息与通信工程专业A+其实不难)

目录 举个IVR例子格局打开,万物皆能IVR - 把《民法典》搬上IVR IVR系统其实可盐可甜。还能可圈可点。 戎马一生,归来依然IVR。 举个IVR例子 以下是IVR系统的一个例子。 当您拨打电话进入IVR系统。 首先检验是否为工作时间。 如是,您将被送入…

基于51单片机的自动浇花器电路

一、系统概述 自动浇水灌溉系统设计方案,以AT89C51单片机为控制核心,采用模块化的设计方法。 组成部分为:5V供电模块、土壤湿度传感器模块、ADC0832模数转换模块、水泵控制模块、按键输入模块、LCD显示模块和声光报警模块,结构如…

垃圾分类管理系统java项目

文章目录 垃圾分类管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目(9.9¥带走) 垃圾分类管理系统 一、项目演示 垃圾分类管理系统 二、项目介绍 系统角色:管理员、用户 1、登录、注册功能…

机器人非线性系统反馈线性化与解耦

机器人非线性系统的反馈线性化和解耦是控制理论中的两个重要概念,它们分别用于简化系统分析和设计过程,提高控制系统的性能。 首先,反馈线性化是一种将非线性系统转化为线性系统的技术。在机器人控制中,由于机器人本身是一个强耦…

​python使用selenium进行Web自动化测试​

什么是selenium Selenium 是 ThoughtWorks 提供的一个强大的基于浏览器的 Selenium 是一个用于 Web 应用程序测试的工具,测试直接自动运行在浏览器中,就像真正的用户在手工操作一样。支持的浏览器包括 IE、Chrome 和 Firefox 等。这个工具的主要功能包…

2024042001-计算机网络 - 物理层

计算机网络 - 物理层 计算机网络 - 物理层 通信方式带通调制 通信方式 根据信息在传输线上的传送方向,分为以下三种通信方式: 单工通信:单向传输半双工通信:双向交替传输全双工通信:双向同时传输 带通调制 模拟信号…

C++基础——继承(下)

一、继承与静态成员 基类定义了static 静态成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个子 类,都只有一个 static 成员实例 。 class person { public:person(const char* name "lisi"):_name(name){} public:string _name;…

那些年我与c++的叫板(一)--string类自实现

引子:我们学习了c中的string类,那我们能不能像以前数据结构一样自己实现string类呢?以下是cplusplus下的string类,我们参考参考! 废话不多说,直接代码实现:(注意函数之间的复用&…

Nacos+GateWay 搭建微服务架构

文章目录 1.当前项目架构分析1.请求多个模块的方式1.请求renren-fast模块开发环境生产环境 2.请求sunliving-commodity模块1.使用环境变量资源路径的方式2.开发环境 dev.env.js3.生产环境 prod.env.js 3.文件上传请求 sunliving-service模块1.请求后端接口(开发环境…

汇聚荣科技:拼多多上架商品后需要做页面推广吗?

在电商平台上,商品的曝光率和销量往往成正比。那么,当您在拼多多上架了新品,是不是就意味着坐等订单呢?答案显然是否定的。商品一旦上架,接下来需要做的就是通过有效的页面推广来增加商品的可见度,吸引潜在买家的注意…