c++ double 只输出五位_c 语言第四章 在控制台上数据的输入和输出
1 数据输出
我们之前已经使用过printf()函数来实现数据在控制台上输出
#include<stdio.h>
int main(){printf("hello world");return 0;
}

具体的用法是
printf("数据模板",数据1,数据2,...)// 数据模板表示输出数据的形式,里面包含占位符,打印的时候使用具体的数据依次的替换占位符输出结果
现在我们就来具体的说明一下printf函数的用法
主要是两个方面:占位符代表的数据类型和占位符代表的数据格式
1.1 占位符的类型
1.1.1 字符字面量
输出数据的时候要考虑到不同数据的数据类型
一个简单的例子
#include<stdio.h>
int main(){char letter = 97;printf("%dn",letter);printf("%c",letter);return 0;
}
输出的结果

我们给一个char类型的变量letter赋值97,
如果使用占位符%d输出的话,那么得到的结果是97;
如果使用占位符%c输出的话,那么得到的结果是字符c;
这里的原因就是在c语言当中char类型是用来保存字符的,但是字符数据的保存形式和整数类型的保存形式是一样的,都是把数据以2进制的形式储存到内存当中
具体的工作就是,把数据 97 转换为 2进制数(结果是1100001)

char类型的数据占用的空间大小是 1 个字节相当于 8 位的2进制数,因此上图就是变量letter在内存当中保存的数据
那么在读数据的时候:
使用%d作为占位符,那么原始数据就被解释位整数,转换为 10进制刚好就是97;
如果使用 %c 作为占位符,那么原始的数据就被解释为字符,那么对于字符就需要把数据进行一次翻译

在上表中 2进制 01100001 对应的字符就是 a
对于字符型数据来说储存的形式和整数是一样的,只不过在读取数据的时候需要做一次编码翻译
再看一个例子
#include<stdio.h>
int main(){int letter = 97;printf("%dn",letter);printf("%c",letter);return 0;
}

把变量的类型改为int,得到的结果是一样的
也就是说 char 类型和 int 类型都是用来保存整数,只不过 char 类型的储存空间比 short int 还要小只有 8 位二进制数(1个字节),那么在输出数据的时候使用占位符来控制输出的是整数还是通过字符编码翻译之后的字符
上面讲的是原理,在实际工作当中,我们不会通过整数来给字符类型赋值(不需要背那张表),通常都会使用字符字面量,把一个字符使用 单引号' 包裹起来
#include<stdio.h>
int main(){char letter = 'a';printf("%dn",letter);printf("%c",letter);return 0;
}

使用 'a' 给 letter 赋值, 'a' 会自动的转换为整数 97,不需要人为的干预,可以理解为编译器自动的帮我们去查字符编码表
#include<stdio.h>
int main(){int letter = 'a';printf("%dn",letter);printf("%c",letter);return 0;
}

使用 int 来处理,结果也是一样的
1.1.2 不能自动转换的情况
再看一个例子
#include<stdio.h>
int main(){int a = 123;printf("%dn", a);printf("%f", a);return 0;
}

同样的数据,使用不同的占位符输出的结果就不一样
这是因为 %f 会把数据按照浮点数进行输出, %d 会把数据以整数进行输出,而整数和浮点数在内存当中储存的形式是不一样的,所以以 %f 去解析整数类型的数据就会出错
1.1.3 占位符可以代表的数据类型

这里是printf()函数针对不同的数据类型使用的占位符,这里有几个问题需要注意
首先,对于浮点数 float 和 double 在内存当中储存的形式是一样的,所以有时候使用相同的占位符不会出错
#include<stdio.h>
int main(){float a = 1.23456;double b = 1.23456;printf("%fn", a);printf("%lfn", a);printf("%fn",b);printf("%lf",b);return 0;
}

使用 %f 和 %lf 输出的结果是一样的
但是 float 和 double 保存的数据精度不同,所以对于精度要求很高的数 %f 和 %lf 就能看出区别了
其次是关于整数数据
整数的表示形式除了 10进制之外,还可以使用 2进制,8进制,16进制
在c语言当中可以
使用 0b开头的整型字面量表示 2进制数;
使用 0开头的整型字面量表示 8进制数;
使用 0x开头的整型字面量表示 16进制数(使用a,b,c,d,e,f代表大于9的数)
#include<stdio.h>
int main(){int a = 13; //10进制数int b = 0b101; //2进制数int c = 011; //八进制数int d = 0x1a; //16进制数printf("%dn%dn%dn%d",a,b,c,d);return 0;
}

%d 会把不同进制的数转换为10进制输出
2进制的 101 -> 10进制的 5;
8进制的 11 -> 10进制的 9;
16进制的 1a -> 10进制的 26;
也可以把10进制的数转为其他进制,或者其他进制相互转换
#include<stdio.h>
int main(){int a = 123; //10进制数printf("%dn%on%x",a,a,a);return 0;
}

使用%o占位符输出8进制,%x输出16进制
10进制的数123 相当于 八进制的 173,十六进制的 7b;
为了方便区分不同进制的数,也可以在占位符当中使用#来输出类型前缀
#include<stdio.h>
int main(){int a = 123; //10进制数printf("%dn%#on%#x",a,a,a);return 0;
}

使用%#o,和%#x 更容易看出整数的进制
1.2 占位符控制输出的格式
可以在占位符 % 和表示类型的字母之间加入一些内容来控制数据输出的格式
比如控制输出内容的最小宽度
#include<stdio.h>
int main(){int a = 123;printf("每天吃%d个汉堡n",a);//原样输出printf("每天吃%5d个汉堡n",a);//最小宽度是5printf("每天吃%2d个汉堡",a);//超过最小宽度原样输出return 0;
}

%<宽度><类型>可以控制输出数据的的最小宽度
也可以控制输出数据的精度
#include<stdio.h>
int main(){double a = 3.1415926;printf("圆周率是%lfn",a);//默认输出小数点后6位printf("圆周率是%.2lfn",a);//只输出到小数点后2位printf("圆周率是%5.2lf",a);//输出小数点后2位,并保证最小宽度5return 0;
}

%<.精度><数据类型>可以控制数据输出的精度
完整的格式是
%[旗标][宽度][.精度]<类型>
中括号[] 的内容可以省略,其中:
旗标:可以使用-,+,空格,#
-:表示左对齐;
+:表示在数据前面添加正负号
空格:表示不显示正数的符号,但是使用空格占位
#:表示显示其他进制数据的前缀(0,0x)
精度在浮点型类型的数据表示小数点后的位数,对于正数表示宽度,剩余位置用0补齐对于其他类型的数据表示截取的最大长度
#include<stdio.h>
int main(){int a = 123456;printf("%+.8d",a);//显示正号,宽度为8,不足8为补零return 0;
}

%+.8d表示显示正号,宽度为8,用0补位
2 数据输入
在程序当中除了需要输出数据,还需要获取用户的输入数据
获取输入数据的方法有很多,这里只介绍一个常用的格式化输入函数scanf()
举个例子,计算长方形的面积,需要用户手动的输入长和宽
#include<stdio.h>
int main(){double w,h,s;//声明变量w:宽,h:长,s:面积scanf("%lf,%lf",&w,&h);//程序等待用户输入,并且扫面输入缓冲区s=w*h;printf("%lf",s);return 0;
}
当程序执行到 scanf() 的时候,会暂停等待用户输入,用户输入完成之后按回车,会自动地扫描用户输入的内容,根据内容的模板来匹配数据,把数据保存到对应的变量地址,这里的 & 表示取地址符,&w 表示变量 w 的地址

结果

sacnf("输入模板",变量地址1,变量地址2,...)
需要注意的是 printf() 后面的参数是变量的值, scanf() 后面的参数是变量的地址,需要加&表示把输入的数据保存到变量的地址中
相关文章:

pyQt 每日一练习 -- 登录框
#codingutf-8#第一个练习,登录框import sys from PyQt4 import QtGui,QtCore#登录框 class LoginBox(QtGui.QWidget):def __init__(self):super(LoginBox, self).__init__()self.initUI()def initUI(self):vBoxLayout QtGui.QVBoxLayout()hBoxLayout_1 QtGui.QHBo…

photoshop CS5 Dreamweaver CS5序列号及完美破解方法
adobe photoshop CS5 的序列号(任选一个)1330-1440-1602-3671-9749-78971330-1191-2998-6712-2520-54241330-1367-4285-4928-0630-31071330-1570-9599-9499-8092-82371330-1028-1662-3206-1688-51141330-1631-5733-5042-4138-6389 Adobe Dreamweaver CS…

[原创]Android Monkey 在线日志分析工具开发
[原创]Android Monkey 在线日志分析工具开发 在移动App测试过程中,Monkey测试是我们发现潜在问题的一种非常有效手段,但是Android原生的Monkey有其天然的不足,数据不能有效的去解读,同时也不能提供非常清晰的信息,所以针对这个问题…

leetcode-295 数据流的中位数
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 3) / 2 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数…

Servlet开发入门
Servlet是sun公司提供的一门用于开发动态web资源的技术。 Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 编写一个Java类,实现servlet接口。把开…

#串口通信超时处理_简单通信协议
用C语言做物联网网关开发时,经常需要通过串口、485接口等从一些传感器读取数据,由于网关设备和传感器所处的环境复杂多样,电磁干扰等常常会破坏传输的数据,为了确保传输数据的可靠性,通常会采取一些策略,常…

在cmd的方式下,简化mysql的输入的方法
2019独角兽企业重金招聘Python工程师标准>>> 在我的电脑,高级系统设置,环境变量,path 添加运行的mysql.exe的路径。 转载于:https://my.oschina.net/u/779687/blog/140411

Parser Generator Tips翻译(中英对译) by Joshua Xu
You can use the ParserWizard command from the Project menu to help you create initial YACC and Lex skeleton source files.如果需要生成初始的YACC & Lex骨架源文件,可以在系统菜单中,选取Project->ParserWizard。Use the Parser Generato…

leetcode-455 分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。…

C++模板详解
参考:C 模板详解(一) 模板:对类型进行参数化的工具;通常有两种形式: 函数模板:仅参数类型不同;类模板: 仅数据成员和成员函数类型不同。目的:让程序员编写…

autocad2007二维图画法_cad怎样绘制简单的二维图形
CAD绘制二维图形非常的简单,大家经常用它来画图,下面是学习啦小编带来关于cad怎样绘制简单的二维图形的内容,希望可以让大家有所收获!cad绘制简单二维图形的方法1、绘图菜单绘图菜单是绘制图形最基本、最常用的方法,其中包含了Aut…

MyEclipse 中配置struts2.2.1的方法
MyEclipse中配置Struts2.2.1版本基本步骤:1,首先就是要建立一个web project项目2,设置jdk和servers路径,如果jdk和servers已经配置ok,跳过这一步骤。在菜单中的window选项中配置jdk和servers对于jdk,点击ja…

BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
BZOJLOJ洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍。 对于\(d_i\)不同的情况: Solution 1:xxy tql! 考虑如何把这些数依次填到树里。 首先对于已解锁的节点\(x\)(已解锁是指父节点已经处理完的点,刚开始就是\(fa…

leetcode-376 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。 例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3…

bootstrap3中关于布局的两种样式
container:用.container包裹的内容即可实现居中对齐。注意,由于在各分辨率下面都设置了padding 和 固定宽度,.container不能嵌套。row:栏栅系统是把父容器平均分为12列。注意,row可以被嵌套。 通过下表可以详细查看Boo…

adg oracle 架构_云化双活的架构演进,宁夏银行新核心搭载Oracle 19c投产上线
云和恩墨顺利完成宁夏银行新数据中心数据库平台的建设,包括新数据中心RAC搭建、DG搭建、旧数据中心到新数据中心的数据迁移,以及在整个项目生命周期中的实施规范、性能测试保障、压力测试等。6月12日,宁夏银行数据库完成全部迁移,…

MFC里ON_COMMAND_RANGE消息映射的ID问题
今天在工作中遇到一个问题,一个动态菜单,每个菜单的菜单项ID是我自己定义的,定义如下: #define IDM_SEARCHRECORD0 222240 #define IDM_SEARCHRECORD1 222241 #define IDM_SEARCHRECORD2 222242 #define IDM_SEARCHRECORD3 …

反射拷贝对象的思路:
0 根据构造器创建对象 1.获取传入进来的对象的字段 2.获取字段的类型 3.拼接 set 与get方法 4 获取传入进来的对象的值 并设置给新对象转载于:https://www.cnblogs.com/classmethond/p/10362263.html

leetcode-402 移掉K位数组
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。 注意: num 的长度小于 10002 且 ≥ k。 num 不会包含任何前导零。 示例 1 : 输入: num “1432219”, k 3 输出: “1219” 解释: 移除掉三个数字 4, 3, 和 2形成一…

c++ using 前置声明_C++ 类的前置声明
今天在研究C”接口与实现分离“的时候遇到了一个问题,看似很小,然后背后的东西确值得让人深思!感觉在学习的过程中有太多的为什么,而每一个为什么背后都隐藏着一些原理和目的,所以得多问自己”为什么“,这样…

测试用的序列化方法
对于实体,进行底层方法测试的时候,经常逐一赋值很麻烦,网上找到序列化xml方法,感觉挺好用的。 前端调用方法时,将实体序列化写入xml文件 //xml路径string filePath "D:\1.xml";using (System.IO.StreamWrit…
HighChart学习-更新数据data Series与重绘
一:HighChart介绍 基于JQuery的纯JavaScript的图标库,支持各种图表显示,同时还支持Mootools 与Prototype详细版本支持在这里: JQuery 1.3.2 - 1.9.x. 2.0.x for modern browsers Mootools 1.2.5 - 1.4.5 Prototype 1.7 支持目…

shell代码模板
批量ssh登录机器#site_search_hosts 10.4.16.205,10.4.20.87,10.4.20.88,10.4.20.89,10.4.20.90,10.4.20.92,10.4.20.93,10.4.21.51,10.4.21.52,10.4.21.53,10.4.21.54,10.4.33.136,10.4.33.137,10.4.33.138,10.4.33.139,10.4.33.140site_search_hosts10.4.16.205,10.4.20.87,1…

leetcode-55 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1…
子分类账知识学习(汇总网上比较有用的资料)
子模块和GL之间关联的变化 12i在功能模块上的变化很多,比如,基本每个模块都启用了MOAC特性,新增加了子帐模块,税模块等等很多新的模块,OPM库存和离散库存集成了。不过这些变化中,大部分不是我们需要重点…

zynqpl端时钟_第十一章 ZYNQ-MIZ701 PS读写PL端BRAM
本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果打印输出到串口终端显示。涉及到AXI BRAM Controller 和 Block Memery Generato…

nagios报警的问题
最近我写了关于naigos监控的安装与配置的技术文档,公司运维按照我的文档部署naigos,发现不能发送报警邮件,经过我的检查,发现问题如下:1、hosts里的配置[rootnagios ~]# cat /etc/hosts # Do not remove the followin…

机器学习常见的分类算法的优缺点
1. 前言 在机器学习中,种类最多的一类算法要属很类算法,本文对机器学习中的各种分类算法的优缺点做一个总结。 2. 贝叶斯分类法 2.1 优点 所需估计的参数少,对于缺失数据不敏感。有着坚实的数学基础,以及稳定的分类效率。2.2 缺点…

公司新来一个同事:为什么 HashMap 不能一边遍历一边删除?一下子把我问懵了!
前段时间,同事在代码中KW扫描的时候出现这样一条:上面出现这样的原因是在使用foreach对HashMap进行遍历时,同时进行put赋值操作会有问题,异常ConcurrentModificationException。于是帮同简单的看了一下,印象中集合类在进行遍历时同时进行删除或者添加操作时需要谨慎,一般使用迭代器进行操作。于是告诉同事,应该使用迭代器Iterator来对集合元素进行操作。同事问我为什么?这一下子把我问蒙了?对啊,只是记得这样用不可以,但是好像自己从来没有细究过为什么?

一文搞懂MySQL索引
官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。看到这里,你是不是对于自己的sql语句里面的索引的有了更多优化想法呢。