为什么printf()用%f输出double型,而scanf却用%lf呢?
之前没有注意过这个问题, 转自: http://book.51cto.com/art/200901/106880.htm
问:有人告诉我不能在printf中使用%lf。为什么printf()用%f输出double型,而scanf却用%lf呢?
答:printf的%f说明符的确既可以输出float型又可以输出double型。 根据"默认参数提升"规则(在printf这样的函数的可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。参见问题15.2。
对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。
下表列出了printf和scanf对于各种格式说明符可以接受的参数类型。
|
格式 |
printf |
scanf |
|
%c |
int |
char * |
|
%d, %i |
int |
int * |
|
%o, %u, %x |
unsigned int |
unsigned int * |
(续)
|
格式 |
printf |
scanf |
|
%ld, %li |
long int |
long int * |
|
%lo, %lu, %lx |
unsinged long int |
unsigned long int * |
|
%hd, %hi |
int |
short int * |
|
%ho, %hu, %hx |
unsigned int |
unsigned short int * |
|
%e, %f, %g |
double |
float * |
|
%le, %lf, %lg |
n/a |
double * |
|
%s |
char * |
char * |
|
%[...] |
n/a |
char * |
|
%p |
void |
void ** |
|
%n |
int * |
int * |
|
%% |
none |
none |
(严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。)
另外, 关于才c++标准输入输出同步, 如果是用了ios::sync_with_stdio(false)的话是可以达到近似scanf的速度的。
static void sync_with_stdio();
Synchronizes the C++ streams with the standard I/O system. The first time this function is called, it resets the predefined streams (cin, cout, cerr, clog) to use astdiobuf object rather than a filebufobject. After that, you can mix I/O using these streams with I/O using stdin, stdout, and stderr. Expect some performance decrease because there is buffering both in the stream class and in the standard I/O file system.
After the call to sync_with_stdio, the ios::stdio bit is set for all affected predefined stream objects, and cout is set to unit buffered mode.
为什么printf()用%f输出double型,而scanf却用%lf呢?的更多相关文章
- 为什么printf()用%f输出double型,而scanf却用%lf呢?
转:https://blog.csdn.net/bat67/article/details/52056057 示例:double x:scanf(“%f”,&x):输入“123.4”,输出x的 ...
- double型(双精度型)的打印(printf) 和scanf
double型,printf()用%f输出,而scanf用%lf来接受输入. 格式 printf scanf %c int char * %d, %i int int * %o, %u, %x u ...
- 只使用处理I/O的printDigit方法,编写一种方法一输出任意的double型量(可以是负的)
/** * Question:只使用处理IO的printDigit函数,编写一个过程以输出任意double型量(可以为负) * @author wulei * 这道题我的理解是使用最基本的System ...
- C语言中printf的规范输出
1.调用格式为 printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另 ...
- [转载]为什么使用%lf读取double型的值,而用%f进行显示?
博客地址:http://blog.csdn.net/shenzhou111/article/details/7826444 今天看到一篇好文章,mark一下. 出去旅游了一下,所以有些天没敲代码,于是 ...
- 使用random输出10个double型的随机数
使用random输出10个double型的随机数 代码如下: package Day05;import java.util.Random;import java.util.Scanner; publi ...
- ①创建项目testpackage ②在pack2.B中添加方法f ③在类A中添加如下三个成员变量:int型的私有变量i float型的变量f double型的公有变量d 在pack1.B的main方法中为对象a的成员变量f和d分别赋值为2和3 在pack2.C的main方法中为对象a的成员变量d赋值为3
package pack1; public class A { private int i; float f; public double d; public float getF() { retur ...
- double 型变量的输入输出标准格式
c语言double型变量标准输入格式: scanf("%lf",num); 标准输出格式: printf("%f\n",num); 注:有过输出用%lf输出OJ ...
- 最好使用%f输出浮点数据,acm
今天做题的时候发现使用%lf输出的时候总是wrong,而一旦改成%f就ac了,询问学长后知道,不要用%lf输出,浮点都用%f 然而我还是有疑惑,如果%f容不下输出的数据怎么办呢? 于是我就去百度 原来 ...
随机推荐
- PAT甲级——A1050 String Subtraction
Given two strings S1 and S2, S=S1−S2 is defined to be the remaining string after taking ...
- 初学linux时遇到的那些哭笑不得的问题
1.终端中无法输入密码? 在终端输入密码,是不会在输入密码的时候看见星号或者圆点符号的.它不会有任何输入密码的视觉指示,也不会有任何光标移动,什么也不显示. 其实是输进去了,只是没有明文显示出来而已. ...
- 关于node中 require 和 ES6中export 、export default的总结
nodejs中 require 方法的加载规则 方法的加载规则 1. 优先从缓存中加载 2. 核心模块 3. 路径形式的模块 4. 第三方模块 一.优先从缓存中加载 main.js:执行加载a.js模 ...
- TZ_14_Zuul网关_过滤器
1.Zuul作为网关的其中一个重要功能,就是实现请求的鉴权.而这个动作我们往往是通过Zuul提供的过滤器来实现的. 2.自定义过滤器实现用户登陆时需要携带一个Key才可以登陆,否则返回403 1> ...
- android搭建
搭建:https://www.cnblogs.com/zoupeiyang/p/4034517.html#1 android sdk manager 翻墙:http://www.androiddevt ...
- PHP实现微信小程序支付完整版,可以借鉴!
本文实例为大家分享了php实现小程序支付的具体代码,供大家参考,具体内容如下 环境: tp3.2.3 + 小程序 微信支付功能开通 Step1: 下载PHP 支付SDK(下载地址) 放到Libr ...
- nginx的四个基本功能
Nginx能做什么 1.反向代理2.负载均衡3.HTTP服务器(包含动静分离)4.正向代理 以上就是做网站小编了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做 1.反向代理 ...
- java -cp ../../DESUtil/ Hello,用-cp指定classpath
运行hello.class 文件 怎么用 java +路径 就是不在class目录下运行 怎么做??? 我想要的是 java 直接去运行某个路径下的class文件 不想到它的目录那里再java hel ...
- 深入理解PHP类的自动载入机制方法
第一种情况:文件A.php中内容如下 <?phpclass A{ public function __construct(){ echo 'fff'; }}?> 文件C.php 中内容如下 ...
- cf round480D Perfect Groups
题意:给一个序列,对于每一个连续的区间,区间内的数至少分成几个组,使得每个组内的数任意2个相乘是一个完全平方数(包括0). 输出每个组数的个数. $n \leq 5000 , |a_i| \leq 1 ...