C语言快速入门之操作符补充和简单的输入输出(简单易懂)

一.单目操作符 

        单目操作符主要有++,--,+,-,与双目操作符的区别是:只有一个操作数

        ++是自增操作符,--是自减操作符,其中++可以放在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代表获得字符,*代表舍去,现在,上面的方式也可以获得结果啦!

        感谢您的阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值