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

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

4.2 字符串简介

  1. %s 转换说明来处理字符串的输入和输出
  2. 字符串一定以空字符‘\0’结尾,所以数组的容量必须至少比待存储字符串中的字符数多1.
  3. 不用亲自把空字符放入字符串末尾,scnaf()在读取输入时就已经完成这项工作。
char name[40];
scanf("s", name);
  1. scanf()只会读取字符串中的一个单词,而不是一整句。
  2. 区别strlen() 和 sizeof():strlen()得出的是字符串中的字符数(包括空格和标点符号),但不包括空字符。而sizeof()把字符串末尾看不见的空字符串也计算在内。
  3. sizeof()计算的是整个存储空间的大小
char name[40];
name = "abc";
sizeof(name);  //40
strlen(name);  //3

4.4 输入输出

  1. 编译时替换:#define TAXRATE 0.15 程序中所有的TASRATE都会被替换
  2. 区别const 和 #define :const类型限定符声明的是变量,而不是常量,只不过不可以修改。#define 定义的是常量。
  3. size_t定义为系统使用sizeof的返回类型,这被称为底层类型。
  4. prinf()转换说明
五种标记:
1. -:"%-20s" 从字段的左侧开始打印改项
2. +:"%+6.2f" 有符号值若为正,则在值前面显示加号,若为负,则在值前面显示减号
3. 空格:" 6.2f" 有符号值若为正,则在值前面显示前导空格(不显示任何符号);若为负,则在值前面显示减号+标记覆盖一个空格
4. #:把结果转换为另一种形式。如果是%o格式,则以0开始;如果是%x%X格式,则以0X或者0x开始;对于所有浮点格式,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g%G格式,#防止结果后面的0被删除。
5. 0:对于数值格式,用前导0代替空格填充字段宽度。对于整数格式,如果出现-标记或指定精度,则忽略该标记。

数字:"%4d" 最小字段宽度
.数字:"%5.2f" 精度
z: 表示size_t类型的值
  1. 程序把传入prinf()的值放入栈的内存区域。计算机根据变量类型(不是根据转换说明)把这些值放入栈中。然后控制转到printf()函数,函数根据转换说明(不是变量类型)从栈中读取值。
  2. 对于scanf()也是使用格式字符串和参数列表。如果读取基本变量类型的值,在变量名前面加一个&;如果是数组,不用使用&(数组名本身就为指针)
  3. scanf()读取机制:
1. scanf()函数每次读取一个字符,跳过所有的空白字符,直到遇到第一个非空白字符才开始读取。
2. 因为要读整数,所以scanf()希望发现一个数字字符或者一个符号(+-)如果找到一个数字或者符号,它便保存该字符,并读取下一个字符。如果下一个字符是数字,它便保存该数字并读取下一个字符。不断经历这个过程,直到遇到非数字字符
3. 如果遇到非数字字符,它便认为遇到了整数的末尾,然后scanf()把非数字字符放回输入。这意味着程序在下一次读取输入时,首先读到的是上一次读取丢弃的非数字字符。

4. 如果使用%s转换说明,scanf()会读取除空白以外的所有字符。这意味着scanf()会读取一个单词,即不包含空白字符的字符串。
5. scanf()会把字符串放到数组中,并在末尾加上'\0'
6. scanf()中的*用法可以是scanf()跳过相应的输出项。如:scanf("%*d %*d %d",&n);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值