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

本章的第一段示例代码和上一张示例代码很相近,代码就不贴了,新出现的特性是使用了一个数组来存放字符串,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. Android Studio使用教程图文详解

    谷歌表示Android Studio 1.0 能让开发者“更快更有生产力”,并认为它可以代替 Eclipse,同时为Eclipse 用户提供迁移步骤.代码自动提示.运行响应速度.都比Eclipse来的 ...

  2. ReetrantLock Synchronized Atomic的性能对比

    之前看到了一篇帖子关于Lock和Synchronized的性能,写的是Lock比Synchronized的性能要好,可是,我试了下,结果却不是这样的,我所使用的JDK的版本是1.7,可能跟原帖作者用的 ...

  3. SOA与EBS集成_Package 调用维护

    介绍SOA Suite与EBS集成成,使用PACKAGE调用集成的组合程序的运维方法: 1.打开组合程序,在oracle adapter上右键,选择edit,在配置向导中跳转到第五步,确认组合程序调用 ...

  4. mysql操作1

    一.连接MYSQL.格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root - ...

  5. 【NOI2006】最大获利

    [问题描述] 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU 集团旗下的CS&T 通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就 ...

  6. MySQL Server 5.6 解压版安装配置

    MySQL解压版下载地址为: http://dev.mysql.com/downloads/mysql/5.6.html#downloads 安装及配置步骤: ①将MySQL的zip包解压到路径C:\ ...

  7. Linux中tar命令-C用法

    最近写了一个项目,其中用到了tar这个命令,发现在Qt中的file取得路径之后,获得的都是绝对路径,这个时候用tar打包会将绝对路径全部放进去, 可以用tar temp.tar.gz file -C ...

  8. python密码处理(可用于生产模式)

    import os from hashlib import sha256 from hmac import HMAC def encrypt_password(password, salt=None) ...

  9. frame与iframe的区别?

    1.frame不能脱离frameSet单独使用,iframe可以 2.frame不能放在body中,否则不能正常显示 3.嵌套在frameSet中的iframe必需放在body中,不嵌套在frameS ...

  10. 表单数据校检方法 onsubmit()的使用?

    在项目中为一个表单(from)编写onsubmit()脚本的时候,经常需要验证表单中数据的合法性 所以常会写道:<form action="/admin/addUser.do" ...