目录:
三:double 和 float 对于——%lf和%f 的用法
一:printf格式字符串
函数原型在头文件“stdio.h”中
1.一般形式
一般形式为: %[标志][输出最小宽度][.精度][长度]类型其中方括号[]中的项为可选项
2.类型字符
d 以十进制形式输出带符号整数(正数不输出符号)
o 以八进制形式输出无符号整数(不输出前缀O)
x 以十六进制形式输出无符号整数(不输出前缀OX)
u 以十进制形式输出无符号整数
f 以小数形式输出单、双精度实数
e 以指数形式输出单、双精度实数
g 以%f%e中较短的输出宽度输出单、双精度实数
c 输出单个字符
s 输出字符串
3.标志字符
标志格式字符 标 志 意 义
- 结果左对齐,右边填空格
+ 输出符号(正号或负号)
空格 输出值为正时冠以空格,为负时冠以负号
# 对c,s,d,u类无影响;对o类, 在输出时加前缀0;
对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点
. 如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数
h 表示按短整型量输出
l 表示按长整型量输出
4.使用printf函数时注意的问题
输出表列中的求值顺序:不同的编译系统不一定相同,可以从左到右,也可从右到左。
Turbo C是按从右到左进行的。但是必须注意,求值顺序虽是自右至左,但是输出顺序还是从左至右
二:scanf格式字符串
函数原型在头文件“stdio.h”中
1.一般形式
一般形式为: %[*][输入数据宽度][长度]类型 其中有方括号[]的项为任选项
2.类型字符
d 输入十进制整数
o 输入八进制整数
x 输入十六进制整数
u 输入无符号十进制整数
f或e 输入实型数(用小数形式或指数形式)
c 输入单个字符
s 输入字符串
3.标志字符
* 表示该输入项读入后不赋予相应的变量,即跳过该输入值
【如:scanf("%d %*d %d",&a,&b);当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b】
% 宽度,如果时小数包含小数点
【比如你的scanf语句吸收格式字段是%4f,但是你输入了3.1415926那么,它只会吸收3.14,作为浮点类型。后面的15926以整型的方式存在于缓存中。】
h 表示输入短整型数据
l 表示输入长整型数据(如%ld) 和单精度浮点数(如%lf)
4.使用scanf函数时注意的问题
a. scanf函数中没有类似printf的精度控制,如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。
b. scanf中要求给出变量地址,如给出变量名则会出错。如 scanf("%d",a);是非法的,应改为scnaf("%d",&a);才是合法的。
c. 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。
编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
d. 在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
e.在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。
f.对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。
g.可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数
scanf("%c%c%c",&a,&b,&c);
输入为:d e f
则把'd'赋予a, 'f'赋予b,'e'赋予c。
只有当输入为:def时,才能把'd'赋于a,'e'赋予b,'f'赋予c。
如果在格式控制中加入空格作为间隔,
如 scanf ("%c %c %c",&a,&b,&c);则输入时各数据之间可加空格。
scanf("%d,%d,%d",&a,&b,&c); 其中用非格式符“ , ”作间隔符,
故输入时应为: 5,6,7
又如: scanf("a=%d,b=%d,c=%d",&a,&b,&c);
则输入应为a=5,b=6,c=7
如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。
补充可查看:
https://blog.csdn.net/liu17234050/article/details/104179726
三:double 和 float 对于——%lf和%f 的用法
1.printf输出
double 和 float 都可以用 %f 占位符 可以混用
而 double 可以额外用 %lf
2.scanf 输入
double 必须用 %lf
float 必须用 %f 不能混用