scanf printf 学习教案和心得
教案
学习资料
一 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出
信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:
printf("<格式化字符串>", <参量表>);
其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符
格式化字符串的格式是:
%[标志][输出最小宽度][.精度][长度]格式字符
标志字符为-、+、#、空格四种,其意义下表所示:
标志 意义
-
结果左对齐,右边填空格
-
输出符号(正号或负号)
空格 输出值为正时冠 对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点
%c 单个字符
%d 十进制有符号整数
%e 以“科学记数法”的形式输出十进制的浮点数 如2.451e+02
%f 输出十进制浮点数,不带域宽时,保留6位小数
%g 选用e或f格式中较短的一个输出十进制浮点数,不输出无效零
%0 无输出无符号八进制整数
%p 指针的值
%s 输出字符串
%u 输出无符号十进制整数
scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。
其调用格式为:
scanf("<格式化字符串>", <地址表>);
格式化字符串包括以下三类不同的字符;
- 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。
- 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多
个空白字符。 - 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非
空白字符相同的字符。
注意:(1)地址表是需要读入的所有变量的地址, 而不是变量本身:
----如果是一般的变量,通常要在变量名前加上"&";但输出时是用变量名
----如果是数组,用数组名就代表了该数组的首地址;输出时也是用数组名
----如果是指针,直接用指针名本身,不要加上“*”;
(2)scanf函数中是否包含空白/非空白字符导致输入格式的不同
如:scanf("%d,%d",&i,&j); scanf中有,所以输入的格式应该是5,6==>i=5,j=6
scanf("%d%d",&i,&j); 可以用空格或回车来分隔两个输入 如 5 6==>i=5,j=6
scanf("%d %d",&i,&j); 同上
(3) 实际使用scanf()函数时存在一个问题, 下面举例进行说明:
当使用多个scanf()函数连续给多个字符变量输入时, 例如:
运行该程序, 输入一个字符A后回车 (要完成输入必须回车)
在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符
输入为:d e f
则把’d’赋予a, ’ ’ 赋予b,'e’赋予c。
只有当输入为: def
时,才能把’d’赋于a,'e’赋予b,'f’赋予c。
如果在格式控制中加入空格作为间隔,
由于scanf函数"%c%c"中没有空格,输入M N,结果输出只有M。而输入改为MN时则可输出MN两字符。
(4)格式字符串的一般形式为:
%
[输入数据宽度][长度]类型
其中有方括号[]的项为任选项。各项的意义如下:
1)类型:表示输入数据的类型,其格式符和意义如下表所示。
格式 字符意义
d 输入十进制整数
o 输入八进制整数
x 输入十六进制整数
u 输入无符号十进制整数
f或e 输入实型数(用小数形式或指数形式)
c 输入单个字符
s 输入字符串
学习心得
在C语言中,printf系列函数和scanf函数功能很强大,用好了的话,很多字符操作都可以很简单,甚至一些简单的正则匹配的工作也可以用scanf来完成,但是我在使用时还不能熟练,经常使用百度 耗费时间 我觉得要准确理解 才能自如地使用。我的徒弟更是一头懵,我觉得学习中就像老师说的那样不断的尝试不断的练习。 在csdn中也可以搜索到学到问题的解答。(ps:百度永远滴神)