本章的标题是字符串的格式化输入/输出,重点介绍输入和输出。

本章的第一段示例代码和上一张示例代码很相近,代码就不贴了,新出现的特性是使用了一个数组来存放字符串,C预处理命令和strlen()函数。

下面具体介绍这些概念。

1.字符串

  C语言没有为字符串定义专门的变量类型,而是存储在char数组中。

  注意:

  1.scanf()读取字符串时,会在遇到第一个空白字符串,制表符或者换行符处停止读取。所以使用%s的scanf()只会读取一个单词而非整个句子(C语言一般用gets()来处理一般的字符串)。

  2.strlen()和sizeof()区别。sizeof是操作符,不是函数。它后面的()并不是必须的,没有歧意时就不必写上了。sizeof操作符计算的是系统为它后面的变量或类型名分配的空间大小,无论其中是否存储了有用数据。strlen()是库函数,()中必须是字符串指针或字符串常量,它返回的是检测对象中第一 个'\0'前的字符个数,不含'\0'。

2.C预处理器

  用法:#define TAXRATE 0.015。在编译程序的时候,0.015会代替所有TAXRATE,这种方式称为编译时代入法。这样定义的常量通常称为明显常量。一般情况下,常量名要大写,这是一个约定俗成的习惯。

  C90新增来一种创建符号常量的方法:使用const关键字。例如,const int MONTHS = 12; C语言还可以通过枚举功能创建符号常量,后面再谈。

  系统也定义来一些明显常量,例如在头文件limits.h和float.h里就有类似的行:#define INT_MAX +32767。

3.printf()和scanf()

  1.printf。格式printf(control-string, item1, item2...); 其中控制字符串包括实际要打印的字符和转换说明。要打印%需要%%。printf()的转换说明修饰符很多而且很强大很灵活。转换的意义在于,它把存储在计算机中的二进制格式的数值转换成一系列字符以便于显示。此处的“转换”可以理解为“翻译”。

  4.4.4节重点讲了不匹配的转换,涉及到很多计算机底层知识。特别是参数传递的工作原理:计算机把变量的值放置到堆栈,但是在读取时是根据转换说明符去读取。

  另外,printf()返回值是所打印的字符的数目。

  2.scanf()。scanf()是print()的逆向操作,它把输入的字符串转换成各种形式:整数,浮点数,字符和字符串。而printf()是把这些形式转换成要在屏幕上显示的文本。scanf()使用指向变量的指针。如果要读取某种基本变量类型的值,在变量名加上一个&;如果读取一个字符串到字符数组,不用&。scanf()返回成功读入项目的个数。

  

这章内容比较多,特别是细节。没必要全部背下来,以后的实践中再去熟悉。

编程练习和上一章的类似,都是printf()和scanf()的练习。

to be continued...

C primer plus 读书笔记第四章的更多相关文章

  1. 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度

    <Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...

  2. 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度

    20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...

  3. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

  4. 4 Visual Effects 视觉效果 读书笔记 第四章

    4   Visual Effects    视觉效果        读书笔记 第四章 Well, circles and ovals are good, but how about drawing r ...

  5. 《Linux内核设计与实现》读书笔记 第四章 进程调度

    第四章进程调度 进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统.调度程序是多任务操作系统的基础.通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的 ...

  6. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...

  7. Getting Started With Hazelcast 读书笔记(第四章)

    第四章 分而治之 在指导了如何进行基本使用之后,又再次进入理论模块. Hazelcast的基本策略就是切片分区,默认是271个片.内置一个 partition table记录那个节点是那个分区,并在h ...

  8. STL源码剖析读书笔记--第四章--序列式容器

    1.什么是序列式容器?什么是关联式容器? 书上给出的解释是,序列式容器中的元素是可序的(可理解为可以按序索引,不管这个索引是像数组一样的随机索引,还是像链表一样的顺序索引),但是元素值在索引顺序的方向 ...

  9. 《Linux内核设计与实现》读书笔记——第四章

    标签(空格分隔): 20135321余佳源 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统. ...

随机推荐

  1. 读写Excel

    有读Excel,也有生成相同格式的Excel.需要引用Microsoft.Office.Interop.Excel.dll public string ShiPin() { //获取项目下的目录 st ...

  2. 分页技术之GridView控件

    GridView控件实现分页技术 第一步:设置GridView控件的属性,跟分页相关的属性设置如下: AllowPaging="true":允许分页, PageSize=" ...

  3. 本地代码上传 -> Github

    首先在控制台cd到你的本地项目,这里以teat为例 1.执行命令:  git init 2.将项目文件添加到仓库中:  git add . (可以是指定文件,将“.”转换为指定文件) 3.接下来com ...

  4. C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体

    //浏览图片 private void btnUp_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialo ...

  5. POJ 2395 Out of Hay(最小生成树中的最大长度)

    POJ 2395 Out of Hay 本题是要求最小生成树中的最大长度, 无向边,初始化es结构体时要加倍,别忘了init(n)并查集的初始化,同时要单独标记使用过的边数, 判断ans==n-1时, ...

  6. 使用C++11 实现的线程池

    最近打算做一个服务器端程序,每来一个客户端请求新开一个线程进行处理.在网上查了一些资料后,准备使用线程池来做这个东西.使用C++11新的库处理想线程问题比以前简单了许多,在网上找到一份线程池的实现,h ...

  7. 由问题引出的fsck命令

    博客停了两天,今天打开linux虚拟机,突然间报错了,顿时心中一喜(是吗?),当时看了下错误说明,好像有关于时间的问题(某个时间是未来时间)..然后我就去兴匆匆的修改系统时间,重启...唉,没作用.只 ...

  8. Codeforces 556A Case of the Zeros and Ones(消除01)

    Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u   Description Andr ...

  9. Spark笔记-treeReduce、reduce、reduceByKey

    参考资料: http://stackoverflow.com/questions/32281417/understadning-treereduce-in-spark http://stackover ...

  10. 魅蓝3s adb interface 找不到驱动程序

    完全照搬大神的步骤就ok啦,,自己记录下,方便以后查找 Win7 x64 Eclipse无法识别手机 / adb interface有黄色感叹号,无法识别 http://blog.csdn.net/z ...