首页 > 其他分享 >C一直学 1.2.1

C一直学 1.2.1

时间:2024-10-19 22:20:20浏览次数:3  
标签:字符 1.2 输出 scanf 占位 一直 printf 字符串

scanf 与printf注解

(一)printf

用法

其作用是将参数文本输出到屏幕,由print(打印)以及 f (format-格式化)组成,作为库函数需要对应的头文件 <stdio.h>

 printf() 打印时不会自动换行,运行结束后,光标就停留在输出结束的地⽅

为了达到换行的目的我们可以使用转义字符\n

 占位符

printf() 可以在输出文本中指定占位符,如下

 变量a取代了%d,而%d就是占位符,会被指定变量或值代替

占位符的第⼀个字符为百分号 %, 第⼆个字符为占位符的类型(如%d,被整形变量代替)

其次介绍%s,%c

 %s 可带入⼀个字符串,这个字符串需要用“  ”给包括

 %c可带入一个字符,字符需要用'  '包括

同样输出文本可以包含多个占位符

这些占位符与后面的参数一一对应,如果有 n 个占位符,printf() 的参数就应该有 n + 1 个 

如果参数个数少于对应的占位符, printf() 的参数就应该有 printf() 可能会输出内存中的任意值

占位符列举

%a :十六进制浮点数,字母输出为小写

%A :十六进制浮点数,字母输出为大写

%c :字符   char

 %d :十进制整数。int

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

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

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

%f :小数(包含 float 类型和 double 类型)float--%f   double--%lf

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

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

%hd :十进制shortint类型

%ho :八进制shortint类型

%hx :十六进制shortint类型

%hu :unsignedshortint类型

%ld :十进制longint类型

%lo :八进制longint类型

%lx :十六进制longint类型

%lu :unsignedlongint类型

%lld :十进制longlongint类型

%llo :八进制longlongint类型

%llx :十六进制longlongint类型

%llu :unsignedlonglongint类型

%Le :科学计数法表⽰的longdouble类型浮点数

%Lf :longdouble类型浮点数

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

%o :八进制整数

%p :指针(用来打印地址)

%s :字符串

%u :无符号整数(unsignedint)

%x :十六进制整数

%zd : size_t 类型

 %% :输出⼀个百分号 

重点我标记了一下

限定宽度

printf() 允许限定占位符的最小宽度

对整数

%5d 表示这个占位符的宽度至少为5位,如果不满5位,对应的值的前面会添加空格

输出的值默认是右对齐,如上图举例;如果改成左对齐,需要在占位符的 % 的后面添加 -

如下

对小数 

限定小数宽度

在打印小数中,下面限定符会限制所有数字的最小显示宽度,小数点后空白填充0

限定小数位数

如果希望小数点后面只保留两位,占位符可以写 成 %.2f 

 若保留小数点后n位,可写成%.nf

宽度与位数,二者可以同时使用

 意为小数点后3位,总宽度为7位(包含小数点)

对字符串

%s 占位符用来输出字符串,默认是全部输出,也可以用%n s指定输出长度,其中n 代表⼀个数字,表示所要输出的长度,空格也会计入在内

无论对整数,小数,还是字符串,其限定值都可用 * 代替 

注:默认情况下, printf() 不对正数显示 + 号,只对负数显示 - 号。如果想让正数也输出 + 号,可 以在占位符的 % 后面加⼀个 + 

(二)scanf

有了变量,我们需要给变量输入值就可以使用scanf函数,如果需要将变量的值输出在屏幕上的时候,可以使用 prinf 函数

scanf() 函数用于读取键盘输入,程序运行到scanf()函数时会停下来,等待用户在键盘输入

用户输⼊数据、按下回车键后, scanf() 就会处理用户的输⼊,将其存入变量

其头文件同样是<stdio.h> ,占位符用法与printf相似,它的第⼀个参数是⼀个格式字符串,格式字符串里面有多少个占位符,就有多少个变量

变量前面必须加上&运算符(指针变量除外),因为scanf传递的不是值,而是地址,即让变量 a 的地址指向用户输入的值

scanf() 处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等,即便使用回车 键,将输入分成几行,也不影响

scanf() 处理用户输⼊的原理是,用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存 进行解读

%d 占位符会忽略起首的空格,从 - 处开始获取数据,到-2停下,. 不属于整数的有效字符,%d只读到-2,第⼆次调用时,从上⼀次停止解读的地方,继续往下读取, 读到不属于浮点数的有效字符时,会停止

scanf 的返回值

scanf() 的返回值是⼀个整数,表示成功读取的变量个数

如果没有读取任何项,或者匹配失败,则返回 0

如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到文件结尾,则返回常量EOF(-1)

EOF-endoffile 文件结束标志

 

r为scanf返回值,若输入错误如下,其返回值为2

scanf() 常⽤的占位符与 printf() 的占位符基本⼀致 

%c 不忽略空白字符,总是返回当前第⼀个字符,无论该字符是否为空格如果要强制跳过字符前的空⽩字符,可在 %c 前加上⼀个空格,表示跳过零个或多个空白字符

而占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止

%s 不会包含空白字符,所以无法用来读取多个单词,故scanf() 不适合读取可能包含空格的字符串

符,scanf() 遇到 %s 占位会在字符串变量末尾存储⼀个空字符 \0

scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组长度,当储存字符串时, 很可能会超过数组的边界,  会出现问题, 所以使用%s时,指定读⼊字符串的最长长度,即写成 %n s

赋值忽略符

若用户的输入可能不符合预定的格式, scanf() 提供了⼀个赋值忽略符 * , 只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃

标签:字符,1.2,输出,scanf,占位,一直,printf,字符串
From: https://blog.csdn.net/W260909_7418/article/details/143080119

相关文章