C语言——(printf和scanf介绍)

发布时间:2024年01月12日

一.printf?

1.基本用法?

printf()的作用是将参数文本输出的屏幕。如下;?

2.占位符

printf()可以在输出文本中指定占位符 ,“占位符”,也就是这个位置可以用其他值代入。??

如:

那么图中的%d,就是占位符,18就是代入的值。占位符第一个字符都是%,第二个字符表示占位符的类型,图中%d为整型,所以输入是整数。不同的占位符,就要输入对应的值。?

printf()也可以使用多个占位符?

图中有2个占位符为%s,%d。那么这2个占位符就对应了后边的2个参数,%s为字符串,%d为整型,占位符与参数是一 一对应的。

3.占位符列举

? %a :?六进制浮点数,字?输出为?写。

? %A :?六进制浮点数,字?输出为?写。

? %c :字符。 ? %d :?进制整数。

? %e :使?科学计数法的浮点数,指数部分的 e 为?写。

? %E :使?科学计数法的浮点数,指数部分的 E 为?写。

? %i :整数,基本等同于 %d 。

? %f :?数(包含 float 类型和 double 类型)。

? %g :6个有效数字的浮点数。整数部分?旦超过6位,就会?动转为科学计数法,指数部分的 e 为?写。

? %G :等同于 %g ,唯?的区别是指数部分的 E 为?写。

? %hd :?进制 short int 类型。

? %ho :?进制 short int 类型。

? %hx :?六进制 short int 类型。

? %hu :unsigned short int 类型。

? %ld :?进制 long int 类型。

? %lo :?进制 long int 类型。

? %lx :?六进制 long int 类型。

? %lu :unsigned long int 类型。

? %lld :?进制 long long int 类型。

? %llo :?进制 long long int 类型。

? %llx :?六进制 long long int 类型。

? %llu :unsigned long long int 类型。

? %Le :科学计数法表?的 long double 类型浮点数。

? %Lf :long double 类型浮点数。

? %n :已输出的字符串数量。该占位符本?不输出,只将值存储在指定变量之中。

? %o :?进制整数。

? %p :指针。

? %s :字符串。

? %u :?符号整数(unsigned int)。

? %x :?六进制整数。

? %zd : size_t 类型。

? %% :输出?个百分号。

4.输出格式

printf()可以定制占位符的输出格式?

1.限定宽度?

printf()限定宽度是最小宽度,如下?

图中限度最小宽度为%6d,所以宽度最小为6,那么123不满足,就会在值的前面添加空格补齐,输出的值默认是右对齐,那么如果想左对齐,只需要在%后面加入(-)负号,如%-6d 。??

如果参数超过了限定宽度是没有问题的,因为限定宽度是最小宽度,如下图

如下图,%12f表示输出的浮点数最少要占12位,那么精度默认小数点后为6位,剩余的就会在1的前边补齐。?

2.限定小数位

输出小数的时候,我们可以根据自己的想法来限定小数位。那么下图中我们想让它输出小数点后2位只需要在%后面加入小数点以及限定的位数即可。

那么会不会四舍五入呢,其实是会的如下图

3.限定宽度和限定小数的结合使用?

这2个是可以结合使用的如下图,最小宽度为10,小数点后限制3位,剩余的右边补齐

我们还可以更加灵活一点,最小宽度,限定小数都是可以用*号来代替的,通过printf()的参数传入,最小宽度为10,限定小数位3,同等与%10.3f 。如下:?

4.输出部分的字符?

在%号后面加入小数点以及限定的位数不仅可以用在浮点数,也可以用在字符串。如下,我们限定的位数为5位,所以输出为”zhang“ 。?

小结:大家可以自行灵活的去实践

二.scanf

那么我们有了printf()输出,当然也有scanf()输入了。

1.基本用法

用于读取用户的键盘输入 ,当程序运行到该语句,会停下来,等待用户在键盘的输入,用户输入完,按下回车键,scanf()就会处理用户的输入,并存入变量,定义的头文件为stdio.h??

scanf()与printf()一样都是有占位符的,如下图, %d 就是?个占位符, % 是占位符的标志, d 表?整数。第?个参数 &i 表示,将用户从键盘输?的整数存?变量 i ,变量前边必须加入&运算符,因为scanf()传递的是地址,将变量i的地址指向用户的输入的值。

例子,那么前边2个%d就表示用户输入的是整数,后边2个%f表示用户输入浮点数。在这里因为我使用的是vs2022,所以scanf( )要加入下划线s ,或者包含,#define_CRT_SECURE_NO_WARNINGS ,这样才不会报错。?

那么scanf()处理数值占位符,会自动过滤空白字符,包括空格、制表符、换行符等。

什么意思呢?如下。键盘等待着我输入,我可以输入一行然后回车再接着输入下一行。

?

注意点下图:??

图中,读取是对应匹配的,如%d占位符,那么读取到整数18就结束了,然后%f占位符从小数点位开始读取就为0.3,然后小数点默认精度为6位,0.300000 , 所以输出18 0.300000。

2.scanf返回值

scanf返回值,返回的是一个整数,表示成功读取的数量个数 。

如图,成功读取了a,b,c。返回值为3?

如果没有读取任何的数,或者说读取失败就会返回0,在vs环境中按键Ctrl+z就是提前结束。?

如果在读取之前,发生了读取错误,会返回常量EOF(-1)

3.占位符列表

? %c :字符。

? %d :整数。

? %f : float 类型浮点数。

? %lf : double 类型浮点数。

? %Lf : long double 类型浮点数。

? %s :字符串。

? %[] :在?括号中指定?组匹配的字符(?如 %[0-9] ),遇到不在集合之中的字符,匹配将会 停?。

值得注意的是,除了%c以外,其他的占位符都会自动忽略起首的空白字符。如,%d可以忽略掉起首的空白字符

但是,如果是%c就不可以 ,因为在读取的时候空格也是字符。

如果要跳过空白字符,可以在%c前边加一个空格

?4.赋值忽略符

如我们输入日期

?但是,当我们不符合规定输入

scanf()解析数据会失败,为了避免这一情况,scanf()提供了赋值忽略符,为*,只要把*加在任何占位符%后边,该占位符就不会返回值,只对它进行解析然后丢弃,如%*c表示,读取后就丢弃,不用返回。

三.结尾

感谢大家的阅读! ! !

?

文章来源:https://blog.csdn.net/m0_74357092/article/details/135508509
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。