3.1 printf函数
①printf函数显示格式串的内容,并可在该串中指定位置插入值。调用printf函数必须提供格式串,格式串后面的参数是需要在显示时插入到该串中的值。 eg
printf (格式串, 表达式1, 表达式2, ...);
显示的值可以是常量,变量,表达式,一次打印的值的个数没有限制。
②格式串包含普通字符和转换说明,转换说明表示打印过程中待填充的值的占位符。转换说明以 % 开头, % 后面的信息指定了从内部形式(二进制)转换为打印形式(字符)的方法;
③格式串中的转换说明要用待显示的值来替换,普通字符和在字符串中出现的那样显示;
④printf()四种用法 ------ 将变量内容输出到显示屏上
(1)printf("字符串");
(2)printf("输出控制符",输出参数);
(3)printf("输出控制符1 输出控制符2 ...", 输出参数1, 输出参数2, ...);
(4)printf("输出控制符 非输出控制符", 输出参数);
⑤转换说明可以用 %m.pX格式或者 %-m.pX格式。m, p 是整数, X是字母, 省略p时要连同小数点一起省略。
⑥转换说明中,m (最小字段宽度)指定了要显示的最少字符数量,字符数少于m则右对齐(值前面放置额外空格),在 m 前加上 - 为左对齐;
⑦转换说明中,p(精度)依赖于 X(转换说明符)
d ---- 十进制整数。p指明待显示的数字的最少个数(必要时在数前加上额外的零),不是小 数点后的位数,区别于%e, 省略p默认位数为1;
e ---- 指数(科学计数法)形式的浮点数。p 指明小数点后数字个数,默认为6位,p为0则不 显示小数点;
f ---- 定点十进制浮点数。p 指明小数点后数字个数,默认为6位,p为0则不显示小数点;
g ---- 指数形式或定点十进制形式的浮点数,形式选择根据数的大小决定;
⑧转义序列:eg. 警报符: \a 产生一声鸣响
回退符: \b 使光标从当前位置回退一个位置
换行符: \n 使光标跳到下一行起始位置
水平制表符: \t 把光标移到下一个制表符的位置
\" 字符 " 标记字符串的开始与结束,它不能出现在没有使用 上述转义序列的字符串内。eg.
printf("\"Hello!\"")
输出结果为 "Hello!"
⑨不能在字符串中只放置单独一个字符 \ ,编译器会认为他是一个转义序列的开始。为了显示单独一个 \ ,需要在字符串中放置两个 \ ; eg
printf("\\")
⑩printf函数在格式串中遇到两个连续的 % ,那么它将显示出一个 % ;
3.2 scanf函数
①scanf函数格式串也包括转换说明和普通字符,scanf函数和转换说明的用法和printf函数转换说明的用法本质上一样的;
②使用scanf函数时,必须检查转换说明的数量是否与输入变量的数量相匹配,并检查每个转换是否适合相对应的变量;
③记得把取地址符 & 放在每个变量的前面;
④调用scanf函数读数据有效但不理想,更多采用字符格式读取所有数据,然后再把它们转换成数值形式;
⑤scanf()用法 通过键盘将数据输入到变量中
(1)scanf("输入控制符", 输入参数);
功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入以输入参数 的值为地址的变量中;
(2)scanf("非输入控制符 输入控制符", 输入参数);
功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入以输入参数 的值为地址的变量中,非输入控制符必须原样输入;
⑥scanf函数本质上是一种“模式匹配”函数,试图把输入的字符串与转换说明相匹配。scanf函数从左边开始处理字符串中的信息。对于格式串中的每一个转换说明,scanf函数从输入的数据中定位适当类型的项,并在必要时跳过空格,在遇到不属于此项的字符时停止;读入数据成功,scanf函数则继续处理,读入数据失败,scanf函数不再查看格式串剩余部分;
⑦scanf函数中,%e, %f, %g是可以互换的,在用于浮点数时遵循相同规则;
⑧格式串中的普通字符:
(1)空白字符:格式串中遇到一个或多个连续空白字符时,scanf函数从输入中重复读空白字 符直到遇到一个非空白字符为止,格式串中空白字符数量无关紧要,格式串 中的一个空白字符可以与输入中任意数量空白字符相匹配,包括零个格式串 中包含空白字符并不意味着输入中必须包含空白字符;
(2)其他字符:格式串中有非空白字符时,scanf函数将把它与下一个输入字符进行比较。如 果两个字符相匹配,那么scanf函数会放弃输入字符而继续处理格式串。如果 两个字符不匹配,scanf函数会把不匹配的字符放回输入中,然后异常退出, 不会进一步处理格式串或者从输入中读取字符;
eg.假设格式串是%d/%d, 输入为·5/·96则可读取,输入为·5·/·96在第二个空格时停止;
⑨printf函数和scanf函数易混淆的点:
常见错误(1):printf函数调用时在变量前放置&;
常见错误(2):除了转换说明,格式串常常不要包含字符,因为scanf函数在寻找数据时通 常会跳过空白字符;
常见错误(3):printf函数通常以 \n 结尾, 但在scanf函数格式串末尾放置 \n 通常是一个坏 主意;