c语言格式化的输入输出

下一篇:c语言文件的输入输出

printf

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

scanf

%[flag]type

现在研究以上的东西

一、flag逐一演示:

-(减号)

printf("%9d\n", 123);      //9代表输出占9个字符的空间

    printf("%-9d\n", 123);//加了-就是左对齐了,默认是右对齐

+(加号)

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

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

又有+号又有-号,左对齐+加号

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

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

当这个数是个负数则会加上负号

不要+号呢?

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

还是会显示负号,不然值就不对了,所以+可以认为强制输出负号

 

0

    printf("%09d\n", -123);//注意左对齐-不能和填0一起用

 

 

二、宽度

演示:宽度:

 printf("%9.2f\n", 123.0);

*号:

    printf("%*d\n",6, 123);//等同于%6d

这样做就相当于参数,也就可以放变量,为格式化带来便利

同样.*也是如此

 

三、修饰符hlL 用来修饰类型

printf("%hhd\n",12345);//输出一个字节的整数,1234516进制是0x3039,如果只取39就是57

 

 

四、最后是类型

 

%n演示:

vs不支持这么写

#include<stdio.h>

int main(int argc,char const *argv[])

{

int num;

printf("%hhd%n\n",(char)12345,&num);

printf("%d\n",num);

return 0;

}

用gcc尝试

输出成功

改为:

printf("%dty%n\n",12345,&num);

输出

所以%n代表printf做到这个地方是时候已经输出了多少个字符,填到指针所指的那个地方去(注意不要忘记&)

 

最后:scanf %[flag]type 比printf简单

*号演示

int num;

    scanf("%*d%d",&num);//跳过一个字符再读一个

    printf("%d\n",num);

会发现跳过了123

 

scanf的类型

%i演示

 int num;

    scanf("%i",&num);

    printf("%d\n",num);

16进制

8进制

 

[…]演示

这是gps可能产生的数据

要这么输入

%*表名要跳过,[^,]表示到逗号之前所有的东西,连起来就是到逗号为止的东西都不要

之后紧接着的,号是读一个,前提是要在输入中有(在scanf中只要不是%就是输入中一定要存在的东西)

之后的%[^,] 表示读到逗号为止,读到sTime里面去

之后以此类推

[]里面可以写的很复杂这里不展开

 

最后printf和scanf的返回值

读入的项目数

输出的字符数

 

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

 

演示:

int num;

    int i1=scanf("%i",&num);//i1是读入个数

    int i2=printf("%d\n",num);//i2是输出个数

    printf("%d:%d\n",i1,i2);

scanf说读到了1个字符(1234)

printf说它输出了1 2 3 4 还有回车换行,一共5个字符

猜你喜欢

转载自blog.csdn.net/weixin_46919419/article/details/112550735