完整的细节将留到第22章中介绍。

调用printf函数一次可以打印的值的个数没有限制。

注意:C语言编译器不会检查格式串中转换说明的数量是否和输出项的数量相互匹配,也不会检查转换说明是否适合要显示项的数据类型。

转义序列

警报(响铃)符 :\a

回退符:\b

换行符:\n

水平制表符:\t

像printf函数一样,scanf函数也有一些不易察觉的陷阱。使用scanf函数时,程序员必须检查转换说明的数量是否与输入变量的数量匹配,并且检查每个转换是否适合相应的变量。

scanf函数本质上是一种“模式匹配”函数,试图把输入的字符组与转换说明相匹配。在寻址数的起始位置时,scanf函数会忽略空白字符(white-space character,包括空格符、水平和垂直制表符、换页符和换行符)。因此,我们可以把数字放在同一行或者分散在几行内输入。

当scanf函数遇到一个不可能属于当前项的字符时,它会把此字符“放回原处”,以便在扫描下一个输入项或者下一次调用scanf函数时再次读入。

为了显示scanf函数的模式匹配能力,考虑读入由用户键入的分数。

 /* addfrac.c */
/* Adds two fractions */
#include <stdio.h> int main(void)
{
int num1, denom1, num2, denom2, result_num, result_denom; printf("Enter first fraction: ");
scanf("%d/%d", &num1, &denom1);
printf("Enter second fraction: ");
scanf("%d/%d", &num2, &denom2); result_num = num1 * denom2 + num2 * denom1;
result_denom = denom1 * denom2;
printf("The sum is %d/%d\n", result_num, result_denom); return ;
}

运行结果如下:

问与答:

1 转换说明%i也可以用于读写整数,%i与%d有什么区别?

在printf格式串中使用时,二者没有区别。但是,在scanf格式串中%d只能与十进制形式的整数相匹配,而%i则可以匹配用八进制、十进制或十六进制表示的整数。

2 我不能理解scanf函数如何把字符“放回原处”并在以后再次读取。

我们知道,用户从键盘输入时,程序并没有读取输入,而是把用户的输入放在一个隐藏的缓冲区中,由scanf函数来读取。scanf函数把字符放回缓冲区后继续读取是非常容易的。

最新文章

  1. PMO是什么?如何与其他部门协作配合提高项目成功率?
  2. 下一代USB接口将支持双向拔插,于明年亮相
  3. JS代码判断字符串中有多少汉字
  4. PDF 补丁丁 0.4.3.1582 测试版发布:修复上一测试版的问题
  5. java集合——题4,6
  6. 转:ASP.NET中的SESSION实现与操作方法
  7. 【高德地图API】如何打造十月妈咪品牌地图?
  8. UE4 AsnycTask
  9. Linux必备操作vim
  10. SEO基础内容
  11. elasticSearch新认知
  12. Too many connections
  13. 关于IDEA每次修改HTML,Css等静态资源文件都需要重启的设置修改
  14. orcale 使用创建日期排序然后分页每次取排序后的固定条数
  15. [学习笔记]JS计数器,闭包和localStorage
  16. 阿里创新自动化测试工具平台--Doom
  17. Confluence 6 为一个空间应用一个主题
  18. Spring Cloud Eureka 服务发现与消费
  19. glob
  20. 003_ElasticSearch详解与优化设计

热门文章

  1. STL unique使用问题
  2. iframe框根据内容自适应高度
  3. vagrant 设置除默认工项目之外的synced_folder一个坑
  4. 玩转HTML5移动页面(动效篇)
  5. yii之srbac详解
  6. 加密你的SQLite
  7. uboot start.S分析
  8. BZOJ2191Splite
  9. Log4j与common-logging
  10. Tiny210v2( S5PV210 )平台下创建基本根文件系统