C语言入门(3)

printf更高级的输出

格式字符

格式字符

作用

举例

%d

代替一个整数

printf("%d",1)

%x

输出一个十六进制数

printf("%x",12) ,输出C

%c

代替一个字符

printf("%c",'a')

%p

代替一个地址

printf("%p",&p)

%s

代替一个字符串

printf("%s","123")

%f

代替一个六位小数

printf("%f",1.2) 输出1.200000

转义字符(个人认为比较常用的且必须知道的)

为了输出有含义的字符,就需要用到转义字符

字符转义

转义字符

输 出 结 果(控制台输出的)

\n

换行

\r

光标移到这行开头,再输入会覆盖hello world

%%

50%

\b

退格符

\a

警告字符,蜂鸣

\\

用于表示一个反斜杠,防止它被解释为一个转义序列符

\?

在书写连续多个问号时使用,防止他们被解析成三字母词

\'

用于表示字符常量'

\"

用于表示一个字符串内部的双引号

例如:打印一个 "\t"

代码则为:

C语言入门(3)_第1张图片

若不加'\',代码改为

结果为:

C语言入门(3)_第2张图片

实则就是打印了一个空格

数字转义

\ddd

ddd表示1~3个八进制的数字。 如: \130

输出X

\xdd

dd表示2个十六进制数字。 如: \x30

输出0

为什么?

对于八进制数130————转化为十进制 :0*1+3*8+1*64=88

十进制88对应的ASCII码值就为字符X

相同的 ,十六进制数\x30对应的十进制————0*16+3*16=48

十进制48对应的ASCII码值就为0

举个例子

对于这条语句,结果为14 '\62' '\t'均为一个字符

1:c

2.:

3.\t

4.e

5.s

6.t

7.\62

8.8

9.\t

10.e

11.s

12.t

13. .

14.c

格式修饰符(常用的)

%ld

输出长整型数据。

%md

m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出。

%.mf

输出实数时小数点后保留 m 位

%nd

限制输出的宽度 右对齐,左补空格 ————%10d 输出" 123"

%-nd

限制输出的宽度 左对齐,右补空格 ———— %-10d 输出"123 "

%m.nd

在限制输出的宽度的同时,保留n个小数

%0md

在不满足位宽的地方补足0

拿一道题(出自牛客网 编程初学者入门——BC13——输出输入出生日期)

C语言入门(3)_第3张图片

现在仅看输出部分

现在想要输出month和date,若为个位数,则需要加上0

那该怎么加?单纯加0会使十位数也会有0————限制宽度为2

那代码为

输出为

C语言入门(3)_第4张图片

这是为什么? %2d 右对齐,宽度为2,不满足则默认为空格

此时需要加上0———%02d

C语言入门(3)_第5张图片

scanf更高级的输入

位宽

现在假如我想只取别人输入的前m个要怎么办呢?

同样可以加一个数字控制位宽

控制输出

  1. 那假如我想一次读取两个数字呢?

  1. 假如我输入的是一个时间,比如12:30,那我要怎么读取12和30呢?

  1. 但是,若不知道输入的格式该怎么办?

可以在中间加上 %*1c ,表示不读取1个%c,也就是不读取一个字符

  1. 如果想读取中间的字符该怎么办?

scanf读取%c会出现的问题

有一个程序

但是输出后b消失了!这是为什么?

\n也是一个字符,在每次输出后可能会下意识的按回车进入下一个输入,因此b被读取为回车

怎么解决?——用getchar 将回车读取走

现在又再次用牛客那道题

C语言入门(3)_第6张图片

此次看输入,仅输入一个数就可以读出三个数

用%md

代表输入一串数,a仅读取前4位,b接着读取2位,c接着读取2位

现在我们拿一道的题目

(来自牛客网——编程初学者入门训练————BC42.小乐乐定闹钟)

C语言入门(3)_第7张图片

用上述知识 输入:

输出,需要打印时间,域宽为2,不满足位宽就打印0

2023.1.09 以上为萌新见解,认为是比较常用到的(可能是做题少了),有不对的地方请各位大佬指出

你可能感兴趣的:(c语言,其他)