scanf函数和printf函数详解

scanf和printf函数是系统的库函数,要使用它们需要需要包括一个<stdio.h>的头文件。

一、scanf函数。

scanf函数功能是按照指定的格式,从键盘输入若干数据给相应的变量。scanf("%d",&a);完全等同于fscanf(stdin,"%d",&a);(格式化读写函数,stdio表示从键盘输入,是默认的对应键盘的文件指针)。

语法:scanf(<格式控制字符串>,<变量地址列表>);

其中,格式控制字符包括格式转换说明符输入分隔符

(1)、格式转换说明符:

%d或%x

输入十进制整数

%o

输入八进制整数

%x

输入十六进制整数

%c

输入一个字符,空白字符(包括空格、回车、制表符)也作为有效字符输入

%s

输入字符串,遇到第一个空白字符时结束

%f或%e

输入一个float型的实数,以小数的形式或指数形式输入都可以

%lf

输入一个double型的实数,以小数的形式或指数形式输入都可以

%%

输入一个%

(2)、输入分隔符:除了格式转换说明符以外的字符,输入时scanf将略去与输入分隔符相同的字符。格式控制字符串中没有显式地指定输入分隔符,则系统用默认的输入分隔符(空格、回车、制表符)来分割数据流。

总之,系统先按照输入分隔符将数据流分隔,再分别按照格式转化说明符进行数据转换,最后将转换后的数据送到变量地址列表所对应的变量中。

除此之外,“%”和格式字符之间还可以插入格式修饰符

l

加在格式符d,i,o,x,u之前用于输入long型数据

加在格式符f,e之前用于输入double型数据

L

加在格式符f,e之前用于输入long double型数据

h

加在格式符d,i,o,x,之前用于输入short型数据

域宽m

指定输入数据的宽度(列数),系统自动按照此宽度截取输入数据

忽略输入*

表示对应的输入项在读入后将不传送给相应的变量

注意事项:用scanf输入数据时,输入结束一定以回车符结束,格式控制字符穿最后切记用换行符‘\n’将会导致输入无法正常结束。

二、printf函数。

语法:printf(<格式控制字符串>,<输出参数表>);

其中,格式控制字符包括格式转换说明符普通字符

(1)、格式转换说明符:

%d或%i

输出带符号的十进制整数,正数的符号省略。

%u

无符号的十进制整数形式输出。

%o

无符号的八进制整数形式输出,不输出前导符0。

%x

无符号的十六进制整数(小写)形式输出,不输出前导符0x。

%c

输出一个字符。

%s

输出字符串。

%f

以十进制小数形式输出实数(包括单、双精度),隐含输出6位小数,输出的数字并非全都是有效数字,单精度实数的有效位数一般为7位(含小数点7位,小数点后默认最多6位,小于6位的话就用0来补),双精度实数的有效位数一般为16位。

%e(%E即大写E表示)

以指数形式(小写e表示指数形式)输出实数,要求小数点前必须有且仅有1位非0数字。

%g

自动选取f或e格式中输出宽度较小的一种使用,且不输出无意义的0。(只可以有6位数字)

%%

显示%

例如:

输出语句 printf("%.10f, %.10f",3.141592653989793,.141592653s89793f ;的输出结果为:3.1415926536,3.1415927410。由于采用了显示精度格式修饰符“%10f,输出的两个圆周率数都显示到第10位小数。其中,第1个圆周率数 3.141592653589793为双精度实数 double 型常量,最大有效数字可达 16 位,能够满足显示精度格式的要求,因此,输出结果比较精确,且最后一位小数进行了四舍五人处理;而第2个圆周率数 3.141592653589793f为单精度实数 float 型常量,最大有效数字只有7位,达不到显示精度格式的要求,因此,输出结果在小数点后第 7位就出现了明显误差。

额外补充一点,在用 scanf函数输人实型数据时不能控制精度,否则将出错。

(2)、格式修饰符:

英文字母l

修饰格式符 d、i、o、x、u 时,用于输出 long 型数据。

英文字母 L

修饰格式符 f、e、g 时,用于输出 long double 型数据 。

最小域宽m(整数)

指定输出项输出时所占的总列数。若m为正整数,当输出数据的实际宽度小干m时,在域内向右对齐,左边多余位补空格。当输出数据的实际宽度大于m时,按实际宽度全部输出;若m有前导符0,则多余位补0。若m为负整数,在域内向左靠齐,右边多余位补空格。

显示精度n(大于等于0的整数)

精度修饰符位于最小域宽修饰符之后,由一个圆点及其后的整数构成。用于控制实型数的输出时,用于指定输出的实型数的小数位数(最后一位小数四舍五人);对于字符串,表示从字符串左侧开始截取的字串字符个数。

-

有-表示左对齐输出,如省略表示右对齐输出。

注意:当显示精度截取字符串时,如:

char arr[]={"Ilovelearning."};
printf("%5.3s",arr);//  Ilo

为什么会是这个结果呢?首先,‘5’表示它的域宽,得有5个字符,其次,‘3’是它的精度,表示从字符串左侧开始截取的字串字符个数为3个,因为不满5个字符,所以要在左侧补空格。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值