break语句
跳出循环,当 break 关键字用于 while、for 循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。
在多层循环中,一个 break 语句只向外跳一层。即只跳出该语句所在的一层循环。
goto语句
goto语句可以使程序在没有任何条件的情况下跳转到指定的位置,所以goto语句又被称为是无条件跳转语句。它的语法如下
goto label;
//其它代码
label:
其中,label为我们自己定义的一个标签,定义的规则与变量的命名相同,它的位置是不固定的,它可以写在goto语句的后面,也可以写在它的前面,然而
goto语句只能在一个函数内部跳转,它并不允许跳转出一个函数外部。
可以通过goto语句来实现一个类while语句的循环功能:
int day = 1;
loop:
if (day <= 31)
{
printf("%d\n", day);
day++;
goto loop;
}
要合理的使用,而不是滥用。goto语句可以在程序中任意的跳转到指定的标签位置,所以如果用的不好可能会破坏程序的逻辑性和安全性。
continue语句
continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。
break与continue的对比:break 用来结束所有循环,循环语句不再有执行的机会;continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。
return语句
含义:return表示从被调函数中返回到主调函数中,返回的同时可以附带一个返回值,这个返回值可以是常量、变量,也可以是表达式。
作用:结束正在运行的函数,并返回函数值。
函数返回值:
计算结果表示函数执行的顺利与否(-1、0)
返回值可以为各种数据类型,如:int,float,double,char,a,*a(指针),结构或类(c++)
空语句
1.起到延时的作用
for(i=0;i<255;i++)
for(j=0;j<255;j++);
2.为了程序的结构清楚,可读性好
3.以后扩充新功能方便。先将函数名写上,随后再添加。
4.对于某些大型的软件项目,特别是一些嵌入式项目,处于自动化测试的需要,要求必须进行语句(例如,if/else语句)的配对。
在进行代码静态解析,单体测试Case抽出的时候,为了保证全路径覆盖,很多专业的高端自动测试工具,会建议进行语句(例如,if/else语句)的配对。此时对于一些不完备的分支,就会用空语句补全。
#与##
#操作符
#操作符用于预处理阶段,将宏参数转换为字符串,只有宏定义中使用(#define)
使用方法:
#define STRING(x) #x
printf("%s\n",STRING(Hello World!));
##操作符
##操作符用于预处理阶段,将粘连两个标识符,只有宏定义中使用(#define)
使用方法:
#define CONNECT(a,b) a##b
int CONNECT(a,1); //int a1
a1 = 2;
#include后 < > 与 “ ”
使用尖括号的话,编译时会先在系统include目录里搜索,如果找不到才会在源代码所在目录搜索。
使用双引号则相反,会先在源代码目录里搜索,如果未找到则去系统默认目录查找,通常用于包含程序作者编写的头文件。
这就意味着,当系统里(如/usr/include/里)有一个叫做math.h的头文件,而你的源代码目录里也有一个你自己写的math.h头文件,那么使用尖括号时用的就是系统里的;而使用双引号的话则会使用你自己写的那个。
输入输出函数
1、printf()函数
printf(“格式控制字符串”,输出项表列)
2、scanf()函数
scanf(“格式控制字符串”,输入项表列)
使用printf()函数时需注意
1)格式字符与输出项的类型要一一对应。
2)若输出项是表达式时,printf()函数将按从右到左的顺序计算出其值后输出。
3)当格式字符的个数多于输出项时,多余格式字符的位置将会输出一个不确定的值。(例:printf(“a=%db=%dc=%d”,a,b) 会输出c等于一个未知的值)
使用scanf()函数时需注意
1)格式字符可以指定输入数据所占的列数,系统会截取相应列数的数据。
(例:
scanf("%3c%3c%*3c%c",&a,&b,&c)
HowAreYou?
a= H,b=A,c=?
格式控制字符串中的“%3c”说明从输入的数据中截取3列赋值给相应的变量,但是字符型数据只能保存一个字符,因此编译系统将字符‘H’赋值给变量a。同理,字符‘A’赋值给变量b。“%*3c”表示要跳过3列数据,最后将字符‘?’赋值给变量c。
2)scanf()函数的格式控制字符串中的普通字符与字符串(例如“,”“a=”)都要原样输入。
(例:
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
运行结果:
12 34 56
a=12,b=-858993460,c=-858993460
分析:
因为输入的数据需使用“,”作为间隔,但实际输入的数据中没有“,”,
因此编译系统只将12赋值给变量a,后面的两个数据34和56将会被舍弃,
不会赋值给变量b和c。
格式字符表
整形数据
printf()与scanf()通用
格式字符 | 含义 |
---|---|
d | 以十进制形式输入或输出带符号整数 |
o | 以八进制形式输入或输出无符号整数 |
x,X | 以十六进制形式输入或输出无符号整数 |
u | 以十进制形式输入或输出无符号整数 |
printf()专用
格式字符 | 含义 |
---|---|
l | 用于输出长整型 |
- | 输出结果左对齐,右边补空格 |
+ | 输出符号(正好或负号) |
# | 对d、u格式字符无影响;对o格式字符,在输出时加前缀o;对x格式字符,在输出时加前缀0x |
m | 指定数据的输出宽度。当数据的实际位数m时,则按实际数据输出;当数据的实际位数小于m时,若输出宽度前有“ - ”则左对齐右补空格,否则右对齐左补空格。 |
scanf()专用
格式字符 | 含义 |
---|---|
l | 用于输入长整型 |
m | 指定输入数据所占的长度 |
* | 表示本输入项不会赋值给相应的变量 |
实型数据
函数 | 格式字符 | 含义 |
---|---|---|
f | 以小数形式输出单精度或双精度数(保留六位小数) | |
printf | E,e | 以指数形式输出单精度或双精度数 |
g | 以%f、%e中较短的输出宽度输出单精度或双精度数 |
函数 | 格式字符 | 含义 |
---|---|---|
f | 以小数形式输入单精度数 | |
scanf | E,e | 以指数形式输入单精度数 |
lf | 以小数形式输入双精度数 | |
le | 以指数形式输入双精度数 |
说明:
1)在格式字符串的“%”和格式字符之间也可以有一些修饰符,与整形数据相同。printf()函数中的修饰符“#”对于f、e、g格式字符当结果有小数时才给出小数点。
2)“%”和格式字符之间可以加入“m.n”,m指明输出的总位数,n指明小数点后的位数,若实际输出位数大于n,则超出的部分四舍五入;若实际输出位数小于n则不足的部分后补0。
3)使用scanf()函数输入实型数据时不能指明精度,即使用“%.nf”的格式是错误的。
getchar()函数与putchar()函数
设ch时字符型变量,函数getchar()的一般调用格式为
ch=getchar();
putchar()函数的一般调用格式为:
putchar(输出参数);
getchar()函数与putchar()函数都是只能读入或输出一个字符,若需输入或输出多个字符,就需要多次调用函数,一般建议采用循环调用的方法。