天天看点

C Primer Plus 第4章 字符串和格式化输入/输出

这篇文章是本人看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)转换说明及其打印的输出结果

C Primer Plus 第4章 字符串和格式化输入/输出

常用:%s 字符串

%x 十六进制记数法

%c 字符

%hu代表以 unsigned short格式输出整数

(2)使用printf ()

printf("格式字符串,待打印项1,待打印项2,…)打印项可以是变量、常量,甚至要计算的表达式

打印%符号的解决办法,使用两个%%

(3) printf()的转换说明修饰符

在%和转换字符之间插入修饰符可修饰基本的转换说明。如果要插入多个字符,其书写顺序应该与表4.4中列出的顺序相同。

C Primer Plus 第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的返回类型,这被称为底层类型。

C Primer Plus 第4章 字符串和格式化输入/输出

例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章的编程练习会放在下一章里面

继续阅读