前言:
🌈✨有很多小伙伴可能会犯和小怡一样的错误,分不清printf和scanf,为了让我们更好的理解这两个函数,小怡也给大家总结了一下printf和scanf的用法,希望大家能和小怡一起进步!
1. printf
1.1 printf的基本用法
printf就是把内容输出到屏幕上,f代表格式化(format),表示可以定制文本的输出内容,他的源文件是stdio.h
#include<stdio.h>
int main(void)
{
printf("Hello world");
return 0;
}
printf()不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。
所以为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符\n
1.2 占位符
printf()参数与占位符是一一对应的关系,如果有n个占位符,printf()的参数就应该有n+1个。如果参数个数少于对应的占位符,printf()可能会输出内存中的任意值。下面是占位符列举:
占位符 | 含义 |
---|---|
%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 | 无符号整数 |
%x | 十六进制整数 |
%zd | size_t类型 |
%% | 输出百分号% |
1.3 输出格式
printf()可以定制占位符的输出格式
1.3.1 限定宽度
printf()允许限定占位符的最小宽度。
限定宽度就是限定的最小宽度,默认的右对齐,%12f表示至少占12位,小数会默认保留六位小数,小数点算一位,所以前面有四个空格。
1.3.2 总是显示正负号
默认情况下,printf()不对正数显示+号,只对负数显示-号。如果想让正数也输出+号,可以在占位符的%后面加一个+。
1.3.3 限制小数位数
希望小数点后面只保留两位,占位符可以写成 %.2f
这种写法可以与限定宽度占位符结合使用哦
最小宽度和小数位数这两个限定值,都可以用*代替,通过printf()的参数传入
%6.2f表示输出字符串的最小宽度为6,小数位数为2
1.3.4 限定字符串的输出
%s占位符用来输出字符串,默认是全部输出。如果只想输出开头的部分,可以用%.[m]s指定输出的长度,其中[m]代表一个数字,表示所要输出的长度
#include<stdio.h>
int main()
{
printf("%.5s\n","hello world");
return 0;
}
上面示例中,占位符%.5s表示只输出字符串“hello world”的前5个字符“hello”
1.4 printf 的返回值
让我们先来看一下这道题
1.先执行最里面的printf("%d",43),在屏幕上打印出43;
2.然后执行中间的printf,相当于打印第一个printf的返回值“4”,“3”有两个字符,所以返回值是2;
3.同理最外面的printf,即打印第二步的“2”返回值,一个字符,所以返回值为1.
所以最后的执行结果是4321,大家做出来了吗
2.scanf
2.1 scanf的基本用法
scanf()函数用于读取用户的键盘输入,程序运行到这个语句时,会停下来,等待用户从键盘输入。用户输入数据,按下回车键后,scanf()就会处理用户的输入,将其存入变量。
它的原型定义在头文件stdio.h
scanf()的语法跟 printf()类似 。
scanf("%d",&i);
注:1.scanf()必须提前知道用户输入的数据类型,才能处理数据;
2.变量前必须加上&运算符(指针变量除外),因为scanf()传递的不是值,而是地址,即将变量i的地址指向用户输入的值。
scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等。
2.2 scanf的返回值
scanf()的返回值是一个整数,表示成功读取的变量个数。如果没有读取任何项,或者匹配失败,则返回0。如果在成功读取任何数据之前,发生了读取错误或者读取到文件结尾,则返回常量EOF,表示-1
🌈✨这次的分享到这里就结束啦,小怡和大家一起学习,一起进步,“倘若穷途末路,那便势如破竹”,我们要努力学习,才能去到自己所向往的星辰大海!