这篇文章是本人看C Primer Plus 第4章 字符串和格式化输入/输出的笔记内容,希望对你有所帮助。
本章知识点:
1、输入和输出 printf() scanf()
2、C预处理器指令
文章目录
-
- 一、前导程序
-
- 1.用C预处理器把字符常量DENSITY定义为62.4
- 2.strlen()获取字符串的长度
- 3. char name[40]用数组储存字符串。该数组占用内存中40个连续的字节,每个字节储存一个字符值。
- 4.使用%s来说明来处理字符串的输入和输出。
- 二、字符串简介
-
- 1.char和null
- 2.使用字符串
- 3.Strlen函数
- 三、常量和C预处理器
-
- 1.const关键字
- 2.明示常量
- 四、 printf ()和scanf ()
-
- 1.printf ()
-
- (1)转换说明及其打印的输出结果
- (2)使用printf ()
- (3) printf()的转换说明修饰符
- (4)转换说明的意义
提示:以下是本篇文章正文内容
一、前导程序
<talkback.c程序>
1.用C预处理器把字符常量DENSITY定义为62.4
2.strlen()获取字符串的长度
letters=strlen(name);
3. char name[40]用数组储存字符串。该数组占用内存中40个连续的字节,每个字节储存一个字符值。
4.使用%s来说明来处理字符串的输入和输出。
二、字符串简介
1.char和null
(1)注意""不是字符串的一部分
(2) 必须创建一个数组,把字符串中的字符逐个放入数组,还有记得在末尾加上一个\0。比如:talkback.c程序程序中name[40]有40个存储单元的字符串,只能储存39个字符,剩下一个字节留给空字符。
2.使用字符串
(1) %s告诉printf()打印一个字符串,根据%s转换说明,scanf()只会读取字符串的一个单词,遇到(空格、制表符或换行符)时就不再读取输入。
(2)字符串"x"和字符’x’
"x"由’x’和\0组成
3.Strlen函数
(1)string.h头文件中包含了strlen()函数和其他一些与字符串相关的函数。
(2) 只有11个单元用来储存Serendipity,sizeof 运算符报告,name 数组有40个存储单元。但是,只有前11个单元用来储存Serendipity,所以strlen()得出的结果是11。(运算符给出的数更大,它把字符串末尾不可见的空字符也计算在内 )
(3)sizeof 运算符,以字节为单位给出对象的大小。
strlen() 函数,给出字符串中的字符长度。
sizeof 6.28 可以不用括号
三、常量和C预处理器
1.第2章中介绍了预处理如何使用#include包含其他文件的信息,预处理器也可以定义常量
句末没有分号;
2.#define 指令还可以定义字符和字符串常量。前者单引号,后者双引号
符号常量名后面的内容被用来替换符号常量
3.符号常量的命名规则与变量相同。可以使用大小写字母、数字、下划线字符,首字母不能为数字。
这里替换TOES的是=20
1.const关键字
用于限定一个变量为只读
const 用起来比 #define更灵活。
2.明示常量
C头文件limits.h(整型限制)和float.h(浮点型限制)分别提供整数类型和浮点类型大小限制相关的详细信息
四、 printf ()和scanf ()
1.printf ()
(1)转换说明及其打印的输出结果
常用:%s 字符串
%x 十六进制记数法
%c 字符
%hu代表以 unsigned short格式输出整数
(2)使用printf ()
printf("格式字符串,待打印项1,待打印项2,…)打印项可以是变量、常量,甚至要计算的表达式
打印%符号的解决办法,使用两个%%
(3) printf()的转换说明修饰符
在%和转换字符之间插入修饰符可修饰基本的转换说明。如果要插入多个字符,其书写顺序应该与表4.4中列出的顺序相同。
注意 类型可移植性
sizeof 运算符以字节为单位返回类型或值的大小。 这应该是某种形式的整数, 但是标准只规定了该值是无符号整数。 在不同的实现中, 它可以是unsigned int、 unsigned long甚至是unsigned long long。
因此,如果要用printf()函数显示sizeof表达式, 根据不同系统, 可能使用%u、 %lu或%llu。 这意味着要查找你当前系统的用法, 如果把程序移植到不同的系统还要进行修改。
C提供了可移植性更好的类型。 首先, stddef.h头文件(在包含stdio.h头文件时已包含其中) 把size_t定义成系统使用sizeof返回的类型, 这被称为底层类型 。
其次, printf()使用z修饰符表示打印相应的类型。 同样, C还定义了ptrdiff_t类型和t修饰符来表示系统使用的两个地址差值的底层有符号整数类型。
当size_t定义为系统使用sizeof的返回类型,这被称为底层类型。
例1
#include <stdio.h>
#define PAGES 959
int main(void)
{
printf("*%d*\n", PAGES);
printf("*%2d*\n", PAGES);
printf("*%10d*\n", PAGES);
printf("*%-10d*\n", PAGES);
return 0;
}
输出
*959*
*959*
* 959*
*959 *
- %2d输出结果应该是2个字段宽度,待打印的整数有3位数字,字段宽度自动扩大以符合整数的长度
- "-"标记说明打印的数字位于字段的左侧
例2
#include <stdio.h>
int main(void)
{
const double RENT = 3852.99;
printf("*%f*\n", RENT);
printf("*%e*\n", RENT);
printf("*%4.2f*\n", RENT);
printf("*%3.1f*\n", RENT);
printf("*%10.3f*\n", RENT);
printf("*%10.3E*\n", RENT);
printf("*%+4.2f*\n", RENT);
printf("*%010.2f*\n", RENT);
return 0;
}
输出
*3852.990000*
*3.852990e+03*
*3852.99*
*3853.0*
* 3852.990*
* 3.853E+03*
*+3852.99*
*0003852.99*
- %e 默认情况下,编译器在小数点的左侧打印1个数字,在小数点的右侧打印6个数字。
- 0 标记,使打印的值前面以0填充以满足字段要求。%010.2f 的第1个0是标记,句点(.)之前、标记之后的数字(本例为10)是指定的字段宽度。
(4)转换说明的意义
转换说明是翻译说明
-
转换不匹配
lname与fname是数组,在scanf()时无需加&符号
接下来一部分会慢慢补充发布,敬请期待,第4章的编程练习会放在下一章里面