字符串是一个或多个字符的序列,由双引号标识,储存于char类型数组中,数组长度大于等于字符串长度加一。

\0为空字符,标记字符串的结束,输入时无需刻意打出,为非打印字符。
"x"等于'x'和'\0'
数组是同类型数据元素的有序序列,可看作一行连续的存储单元。
char name[40]; //创建一个有四十个存储单元的char类型数组strlen()函数:给出字符串中字符的长度(不包括空字符)。位于头文件#include<string.h>中。
相较于strlen(),sizeof()输出的是char型数组的总长度。(如果数组长度大于字符串长度,二者结果即不相同)
常量和C预处理器:
创建常量:
#define TAXRATE 0.015 //在后续代码中,TAXRATE都会被替换为0.015
//大小写不影响运行,但常量大写是C的传统
//此外,在名称前加前缀c_或k_也是一种命名约定,但不常用const int MONTHS = 12; //MONTHS在程序中只读而不可更改明示常量:头文件limits.h和float.h中分别提供了与整数类型和浮点数类型大小显示相关的详细信息,定义了一系列明示常量(在3.11中使用过)。



上表中FLT分别替换为DBL和LDBL,则分别表示double和long double类型对应的明示常量。
print():


printf("Farewell! thou art too dear for my processing,\n");
//只打印短语或句子不用转换说明
printf("%c%d\n",'$',2 * cost);
//printf使用的是值,无论是变量、常量还是表达式的值
//转换说明应按顺序一一相对应,如若对应错误,则会导致该转换说明结果甚至该语句更多结果出错 在%和转换字符之间插入修饰符可修饰基本的转换说明


当输出多行数字,各数字位数不一,可通过使用足够大的固定字段宽度使各列对齐,让格式看起来更美观。
当不知道数字宽度,又不想留出多余的空白,可指定小于或等于该数字的字段宽度,如%.2f


printf的返回值:printf返回打印字符的个数
n = printf("Hello World!");
printf("上面的printf函数打印的字符数为%d个\n"); //包括空格和换行符(\n)【大部分C函数都有返回值,返回值可用于计算和参数传递】
printf语句太长时间可以用空白分割不同的部分,可分割的有如下几种状况:
1.双引号外断行
printf("今天的早餐共计%d元",
yuan);2.使用多个语句说出一行话,无\n,后面的printf中输出的内容会接着前面的内容。
3.反斜杠加 Enter键:
printf("另一种输出\
方法");
//换行后若不想在该处打印空格代码应从最左边开始4.在两个双引号之间用空白隔开会被C编译器看做是一个字符串
printf("早上好" ",吃了么?");
//又或者
printf("早上好"
",吃了么?");scanf函数
1.用scanf()读取基本变量类型的值,在变量名前加&
2.如若读取字符串,不使用&
scanf("%d %d", &a, &b);
scanf("%s",name);在输入时,为表示是两个变量(如下图:表示是1和2而不是12)可用空格,换行符或制表符把输入的各变量分开(在转换说明为%c时除外),例:

存在正负号时,正负号也可将两个变量区分开。
【scanf中double的转换说明要加小写字母l修饰符】
double a;
scanf("%lf",&a);
使用多个修饰符时,注意顺序

scanf函数读取一个字符后,直到遇到下一个非空白字符才开始读取(转换说明为%c的除外),即遇到空格、制表符或换行符时跳过;如果使用字段宽度,scanf则会在满足字段宽度或遇见空白字符时停止读取一个字符
如果输入内容与转换说明不匹配,该值不会被赋值给变量,而是会被放回输入,在下一次读取输入时,首先读取该值。
当转换说明为%s时,scanf把字符串放入相应数组的同时会在末尾加上'\0'。
[scanf的输入格式]:scanf函数输入时除空格字符外必须与输入字符串严格匹配:
例1:
scanf("%d,%d", &n, &m);
\*
以下格式皆可:
88,121
88, 121
88,
121例2:
scanf("%d ,%d", &m, &n);
\*
以下格式皆可:
88,121
88 ,121
88 , 121通常scanf会跳过空白读取,但scanf(" %c",&ch)会从第一个非空白字符开始读取,并将输入中第二个字符赋值给ch
scanf的返回值:scanf函数返回成功读取的项数,在无读取项或者读取内容与转换说明不匹配时返回值为0,在检测到“文件结尾”时,返回EOF
[*在printf()和scanf()中的区别]
在printf()中,*可以用于通过程序指定字段宽度:
scanf("%d", &width);
printf("The number is :%*d\n", width, number);
//前者为字段宽度,后者为待打印数字在scanf()中,*用于跳过输出项:
scanf("%*d %*d %d",&ch);
//输入1 2 3,跳过前两个,将第三个整数拷贝给ch,ch = 3