C语言程序设计 学习笔记 格式化输入输出

格式化输入:
scanf:

%[flag]type

格式化输出:
printf:

%[flags][width][.prec][hIL]type

对于flags,表示的是标志,可以使用的内容如下:
在这里插入图片描述

举例事例:

int main(){
	printf("%9d\n",123);
	printf("%-9d\n",123);
	return 0;
}

输出结果是:

      123
123

第一行比第二行左边多了6个空格,事实上就是将我要输出的东西长度固定为9,并且向右靠拢
(空格+字符长度(<=9的情况下)=9)

的意思就显示其正负号(如果本身数字是负数,如

printf("%+d\n",-123));

那么最终输出还是-123,和没有+号一样

如果是

printf("%09d\n",123);

那么会在空余部分用0补上,输出结果就是000000123

width和.prec:
在这里插入图片描述

对于number.number的使用,如

printf("%9.2f",123.0);

那就是输出长度为9,保留两位小数点的字符,输出结果为:

   123.00

算上空格、数字、小数点 长度为9

对于*的使用,可以理解为如下:
星号使用的是下一个参数,如:

printf("%*d\n",6,123);

那么这个星号指的就是下一个参数6,然后%d仍然是123.
这对要求格式输出的时候很有用,尤其当我的参数是变量的时候

hlL 修饰符 表示修饰类型
在这里插入图片描述

hh → 把我要输出的东西当作单个字节来输出
h → 当作short输出
以此类推
(感觉用到的不多,编译器不同出现的结果也不同)

type总结
在这里插入图片描述

scanf的flag
在这里插入图片描述

对于跳过的使用,如下:

#include <stdio.h>

int main(){
	int num;
	scanf("%*d%d",&num);
	printf("%d\n",num);
	return 0;
}

此时,输入123_456(_是空格),num跳过了123,读取到的是456,所以printf出来的就是456

scanf的type
在这里插入图片描述

对于scanf的%i,这个比%d更加灵活,举例如下:

int main(){
	int num;
	scanf("%i",&num);
	printf("%d\n",num);
	return 0;
}

如果我输入的是123,那么还是输出123,
如果我输入的是0x12,显然这是16进制,系统会自动将其转化成10进制输出,结果为18
如果我输入的是012,系统会辨认出这是8进制,将其转为10进制输出,结果为10

[…] 所允许的字符
在这里插入图片描述

上面是我要输入的东西,对于下方的scanf进行解释:
最开始出现的%*[^,] 我们读取的是$GPRMC,由于带星号,所以这是跳过接收,直到出现逗号为止(不包含这个逗号)
其次一个逗号,格式要求
再接下来的%[^,] 读取字符串,直到逗号为止,那就是读入了004319.00,后方代码以此类推。

scanf和printf的返回值
1.读入的项目(item)数
2.输出的字符数

int main(){
	int i1,i2;
	int num;
	i1 = scanf("%d",&num);
	i2 = printf("%d\n",num);
	printf("%d:%d\n",i1,i2);
	return 0;
}

输入1234,输出的i1,i2行是
1:5
1代表我读入的项目数是1(一个num)
5代表我输出的字符数是5(1、2、3、4、\n)

在要求严格的程序中,应该判断每次调用scanf或printf的返回值,从而了解程序运行中是否存在问题

猜你喜欢

转载自blog.csdn.net/a656418zz/article/details/84067122