在开始学习这节的内容之前,我们先要会使用基本的输入输出函数printf 和 scanf。
printf函数
printf 函数会在屏幕上打印你要的字符串,它的返回值是打印的字符个数。我们主要得明白如何给他写参数。
如下面代码所示,printf的参数主要分为两个部分,一部分是双引号内的字符串,一部分是逗号后面的参数列表。其中参数列表是与字符串内的 %+一定符号 ,配合使用的。
字符串内的 "% + 一定符号" 在被打印时会按照顺序和一定格式替换为参数列表中的参数。
int a = 12;
float b = 1.2345;
printf("the number is: %d and %.2f",a,b);
其中的 "% + 一定符号" 具体来说是这样 %[flags][width][.precision][length]specifier ,参考cplusplus.com/reference/cstdio/printf/
我们一般只用几种
%d | 打印十进制整型 |
%05d | 打印十进制整型,但补充前导零,位宽为5,例如 12 -> 00012, 123 -> 00123 |
%f | 打印浮点型(也就是小数) |
%.2f | 打印浮点型,但保留两位小数 |
%c | 打印单个字符 |
%s | 打印字符串 |
%e | 用科学计数法打印 |
%o | 打印八进制整型 |
%x | 打印十六进制整型 |
%% | 打印一个'%' |
scanf函数
scanf函数用来给程序输入数据,与printf的用法大同大异。其参数也有字符串和参数列表两部分。
不同的是scanf字符串中的内容除了%...以外需要你原封不动的输入。程序执行到scanf后就会等待你的输入,输入以空格或者回车等空白字符结束。一般只会这么用↓↓↓
char str[100]; //声明一个字符串叫str
scanf("%s",str);
int a;
scanf("%d",&a);
float b;
scanf("%f",&b);
如果不是字符串,别忘了在变量名前加一个'&'因为scanf要求参数列表内的参数是地址,'&'是取地址操作符,&a的意思就是a变量的地址。
常量
常量是诞生就不可改变的量,数字常量后可以加字符表示数据类型,可以加前缀表示进制
符号 | 例子 | 意义 |
---|---|---|
前加0 | 012 | 表示八进制 |
前加0x | 0x1a | 表示十六进制 |
后加U | 121U | 表示无符号的整型 |
后加L | 123L | 长整型 long |
给常量起名,让常量像变量一样有个名字,我们有三种方法:宏定义,修饰变量和枚举类型。
1.宏定义
#define HEIGHT 12
#define WIDTH 187UL
#define FLOAT1 123.11
宏定义原理只是简单的替换,如上代码在预处理时会把代码中的HEIGHT替换为12。
2.const修饰变量
const int a = 112;
const int b = -89;
const float c = 1.231;
被const修饰的变量就不可更改了──只读。除了具有常量的属性,其他方面是和变量相同的,例如:作用域,生命周期。
3.枚举常量
使用 enum + 枚举类型名 + {枚举元素1, 枚举元素2,... } 来定义,具体看例子代码
enum DAY //定义枚举类型DAY,有七个值
{
MON,TUE,WED,THU,FRI,SAT,SUN
};
enum DAY day; //定义枚举变量day,day可以有上述枚举类型的七个值
enum DAY //定义枚举类型DAY的同时也定义枚举变量day
{
MON,TUE,WED,THU,FRI,SAT,SUN
} day;
enum DAY //不定义枚举类型,直接定义枚举变量day
{
MON,TUE,WED,THU,FRI,SAT,SUN
} day;
在代码中,我们可以给MON等枚举元素赋值,如果不赋值,默认会从0开始逐个加1,若赋值,则未赋值的会逐个加1。
enum DAY
{
MON, TUE , WED = 4 ,THU, FIR, SAT, SUN;
}
//在这个例子中,MON = 0, TUE = 1, WED = 4, THU = 5,
//FRI = 6, SAT = 7, SUN = 8
我们定义枚举类型/变量后就可以使用它,例如:
enum
{
MON, TUE , WED ,THU, FIR, SAT, SUN
} day;
day = TUE;
day = THU;
day = MON; //可以给day 赋值任意枚举元素
printf("%d",day); //会打印0
printf("%d",MON); //也会打印0