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

本章的第一段示例代码和上一张示例代码很相近,代码就不贴了,新出现的特性是使用了一个数组来存放字符串,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. 【转】iOS6中的Auto Layout:通过代码添加约束

        最近做的项目用到了Auto Layout,于是经过了一番大量的google,这是我看到的讲用代码创建约束最清晰的一篇教程,于是想跟更多的人分享一下.原文也比较简单,可以直接过去看,如果我翻译的 ...

  2. Delphi 动态创建组件,单个创建、单个销毁

    效果图如下: 实现部分代码如下: var rec: Integer = 0; //记录增行按钮点击次数 implementation {$R *.dfm} //动态释放单个组件内存,即销毁组件 pro ...

  3. linux ulimit的使用,如何产生core文件,调试段错误

    ---恢复内容开始--- 下面先简单介绍下ulimit命令: 1. limit -a 可以查看系统各种资源的限制,如: core文件大小,数据段的大小等. $ ulimit -a core file ...

  4. PhotoShop 移动工具详解

    自动选择工具 勾选后  可以随意移动任意图层     不勾选  只适用于移动当前所选图层 Ctrl+Z 还原移动Ctrl+Alt+Z 后退一步 复制图像 Alt键+拖动 Shift+Alt+拖动   ...

  5. JS浮点数运算Bug

    JS浮点数运算Bug的解决办法(转) 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.0849999 ...

  6. PHP mongoDB 操作

    <?php /** * PHP操作MongoDB学习笔记 */ //************************* //** 连接MongoDB数据库 **// //************ ...

  7. VISUAL STUDIO 2005连接MYSQL数据库

    // mysql.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <string.h> #include &l ...

  8. 多项式求和 AC 杭电

    多项式求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  9. c语言用封装来优化程序

    一.基础研究 先对函数fa进行研究,代码如下: fa函数的参数为一个字符指针,他存储要输出的字符串.因为要显示在屏幕的中央位置,所以我们要把字符串放在段地址b800处.用strlen获取字符串的长度, ...

  10. ionic list item-radio checked

    <div class="list"> <label class="item item-radio" ng-repeat="k in ...