//下文仅为个人理解
目录
1.字符串
(1)定义
(2)C对字符串的处理
(3)字符串与字符的区别
2.解读printf()与scanf()
(1)printf()
1.printf函数下的转换说明符的修饰
2.转换说明与待打印值类型占位数不匹配的说明(例子中仅为部分代码)
(2)解读scanf()
1.scanf的使用须知
2.scanf()读取数据的过程
(3)printf()与scanf()的区别
3.零碎知识
一个或多个字符的序列被称为字符串。如"a","abc"(双引号不算字符串的一部分)。
1.C语言用char类型的数组储存字符串(数组由来连续的储存单位组成,字符串被储存在相邻的储存单位中,并且每个单位仅储存一个字符)。
2.字符串的末尾全部都以空字符\0结束。(该空字符占用一个字节)。
1.字符串是char类型数据的派生类型,而字符是char类型数据的基本类型。
2.书写上字符串为如"a"的双引号所包含,字符则为如‘a’的单引号所包含。
标记 |
含义 |
- | 待打印项左对齐,即从字段的左侧开始打印该项,示例:"-20s" |
+ | 有符号值若为正,则在值前面显示加号;若为负,则在值前面显示减号,示例:"+6.2f" |
空格 | 有符号值为正,则在值前面显示前导空格(不显示任何符号);若为负,则在值前面显示减号+标记覆盖一个空格,示例" 6.2f" |
# | 把结果转换为另一种形式。(如”%#o"就是把结果转化为8进制的形式) |
0 | 对于数值格式,用前导0代替空格填充字段宽度,对于整数格式,如果出现-标记或者指定精度,则忽略该标记,示例:"%010d" |
说明:转换说明与待打印值类型占位数不匹配时,程序不会报错,但运行结果不正确。
种类:转换说明与待打印值类型占位数不匹配有以下3种:
a.转换说明数量>待打印值类型数量
举例
printf("There are two digits:%d %d",number1,number2,number3);
b.换说转明数量<待打印值类型数量
举例
printf("There are two digits:%d %d %d",number1,number2);
c.转换说明数量=待打印值类型数量,但两者类型不匹配
举例
int number1=1;
float number2=6.6;
printf("There are two digits:%d %d",number1,number2);
a.用scanf()读取字符数组时,变量名前不需要加上地址运算符“&”。
b.scanf()的返回值为其成功读取的项数(注意是成功读取)。
c.scanf读取输入时会自动忽略空白和与其转换说明符不符的输入(唯一例外的的是%c转换说明符,此时scanf会读取包含空白符的所有字符)
d.如果scanf没有成功读取的项,其返回值为0.
这里我分为有无字段宽度两种情况:
有字段宽度时
scanf会忽略第一个与转换说明符相对应的字符之前的空白符与和转换说明符不对应的字符,从第一个与转换说明符相对应的字符开始读取,直至字段末尾或者遇见空白符结束读取。
无字段宽度时
scanf会从第一个与转换说明符相对应的字符开始读取,忽略遇到的空白符,直至读取完与转换说明符相对应的的输入。
1.两者的转换说明符大部分相同,小部分有出入(如scanf的浮点数据类型的转换说明均为%f,而printf的却多了%lf,%Lf,比scanf更加细分化了)。
2.函数概念上:printf是格式化的输出函数,而scanf是C语言的输入函数。
(1)const限定符与C预处理指令#define能锁死变量的数值,也就使变量变成了字符常量。啰嗦一句,C程序中字符常量常以大写字母表示(如NUMBER),并且不要用const限定符#define处理同一个变量,这样的话程序会报错的。
(2)strlen()函数的储存单位为字节,转换说明与sizeof一样都是%zd(或者是%u,%lu)。
结束