一.单目操作符
单目操作符主要有++,--,+,-,与双目操作符的区别是:只有一个操作数
++是自增操作符,--是自减操作符,其中++可以放在a的前面,++也可以放在a的后面,++a和a++都代表给a加1,代码如下:
int main() {
int a = 10;
a++; //后置++
++a; //前置++
printf("%d", a); //12
return 0;
}
那么两者有什么区别呢?我们利用如下的代码来解释:
int main() {
int a = 5;
int b = ++a; //先+1,后使用 b = 6
printf("%d %d", a, b);
}
如果是前置++,会先+1,然后再使用,在上面的代码中,我们先给a+1=6,然后赋值给b=6,因此输出的结果是6 6
int main() {
int a = 5;
int c = a++; //先使用,后+1 c = a; a += 1;
printf("%d %d", a, c);
}
对于后置++,会先使用,再+1,在上面的代码中,先给c赋值5,然后再给a+1,最后输出的结果是5 6
不仅在赋值中是这样,我们在输出中也是这样
int main() {
int a = 5;
printf("%d\n",--a); //4
printf("%d",a); //4
return 0;
}
输出结果是
4
4
int main() {
int a = 5;
printf("%d\n",a--); //5
printf("%d",a); //4
return 0;
}
输出结果是
5
4
对于+和-,如果是单目操作符使用的时候,代表是否改变符号,+a代表不改变a的符号,-a代表改变a的符号
int main() {
int a = -10;
printf("%d\n", a); //-10
printf("%d\n", +a); //-10
printf("%d\n", -a);
}
输出结果是
-10
-10
10
二.强制类型转换
int main() {
3.14; //double
3.14f; //float
//int a = 3.14; //可能数据丢失,报错
//printf("%d", a); // 3
int b = (int)3.14; //无警报
return 0;
}
一般写出的浮点数是double类型,如果该float类型在数后面+f,如果我们给int类型赋值一个浮点数,可能会有数据丢失,而导致报错,如果我们在赋值时强制改变类型,就不会出现警报
三.printf
1.printf的含义
printf可分解成print和f,其中print - 打印,f - format - 格式,就是有标准格式的打印,会运用到头文件#include <stdio.h>,stdio可以分解成std,i,
o,std代表standard(标准),i代表imput(输入),o代表(输出)
2.占位符
占位符代表这个位置可以用其他值带入,我们常用的占位符有
%d 十进制,有符号整型
%s 字符串
参数与占位符一一对应
%f 小数(float,double)
%c 字符
%hd short int
%hu unsigned short int
%ld long int
%lu unsigned long int
Lf long double
%p 指针
%u 无符号整数
%x 十六进制整数
%zd size_t
例如:
int main() {
int m = 0;
m = 3;
printf("there are %d apples \n", m);
printf("%s will come\n", "zhangsan");
printf("%s says it is %d o'clock", "zhangsan", 20);
return 0;
}
3.限定占位符宽度
在%和符号之间加入数字,代表所能输出的最小的长度,输出结果默认右对齐,缺少部分会用空格补齐,例如
printf("%5d\n", 123);
输出结果是
123
printf("%5d\n", 1234567);
输出结果是
1234567
5是最小长度,由于有七个字符,会全部输出
如果我们想让他默认左对齐,我们可以写出%-5d类型即可
对于float类型
printf("%12f\n", 123.45);
输出结果是
123.450000
其中.也是符号,占一个位置
4.显示正负号
我们想要显示printf所输出的数字的正负号,可以将%d写成+%d和-%d,
int main() {
int i = 10;
printf("%d\n", i);
printf("+%d\n", i);
printf("-%d\n", i);
return 0;
}
输出结果
10
+10
-10
5.限定小数位数
对于%f(六位),写成%.小数位数f即可
int main() {
printf("%f\n", 123.45);
printf("%.2f\n", 123.45);
printf("%.1f\n", 123.45); //会四舍五入
printf("%*.*f\n", 6, 1, 123.45);
return 0;
}
如果保留位数比原数的小数位数小,会四舍五入
对于%*.*f,*会在后面写出,如上代表最少6位,小数保留1位
结果是
123.450000
123.45
123.5
123.5
6.输出部分字符串
我们想输出部分字符串,在%s改成%.输出个数s,例如
int main() {
printf("hello world\n");
printf("%s\n","hello world");
printf("%.5s\n", "hello world");
return 0;
}
输出结果是:
hello world
hello world
hello
三.scanf
1.scanf的需求
scanf是用来输入东西的,需要提前知道输入东西的类型,对于字符串以外的输入,需要取地址&,头文件也是#include <stdio.h>
2.返回值
scanf的返回值是整数,表示成功读取的变量个数,如果未读取任何项目,或读取失败返回0
如果成功读取之前,发生了读取错误或遇到读取结尾,EOF,代表end of file ,返回-1
3.指定字符
%[] 在方括号中指定一组匹配的字符 %[0-9]
4.读取
(1)只要不是%c,scanf都不会管空白字符,直接跳过
(2)%c:字符可以是空格,例如
int main() {
char c1 = 0;
char c2 = 0;
char c3 = 0;
scanf("%c%c%c", &c1, &c2, &c3);
printf("%c %c %c", c1, c2, c3);
return 0;
}
如果我们输入的是a b c的话,会认为c1是a,c2是空格,c3是b,输出结果a空格空格空格空格b
(3)%s:会从第一个非空格开始,读取到第一个空格为止,只能连续读取,会在读取的末尾加\0
例如:
int main() {
char arr[20] = { 0 };
scanf("%s", arr); //数组名本来就是地址
printf("%s\n", arr);
return 0;
}
我们输入空格空格abc空格d空格回车的话,只会输出abc,然后在abc后面加上\0
(4)其他:很多时候,我们假如对于代码:
int main(){
int year = 0,mouth = 0,day = 0;
scanf("%d-%d-%d",&year,&mouth,&day);
printf("%d-%d-%d",year,mouth,day);
return 0;
如果我们输入:
2024-2-8
会得到
2024-2-8
但是如果我们输入
2024 2 8
会得到
2024-0-0
因为它只会读取同类型的内容,如果我们想让它无论怎样输入都可以获得我们想要的结果,我们只需要在%d之间加入%*c,%c代表获得字符,*代表舍去,现在,上面的方式也可以获得结果啦!
感谢您的阅读。