各位看官,今天讲的是c语言前期学习一定会使用的两个函数scanf和printf。一个是输入函数一个是输出函数,但他们的工作原理几乎相同,那我们先
目录
1.1:基本用法
1.2:占位符
1.3:输出格式
2:scanf
2.1:基本用法
2.2:scanf的返回值
2.3:占位符
1.1:基本用法
printf()的作用就是在屏幕上打印出你要打印的项,你可以在这个里面进行运算。但这里只是简绍一下基本用法。例如你想要在运行的时候在屏幕上打印出一个人的名字:
这里就是用上一篇我写的变量的创建并且初始化。但这里不同的是我创建的是一个数组,是一个char类型的数组。这就好比char数组里面有很多个char类型的变量,但具体有多少嘞,这个就是依据自己需要来写,在[ ]里面写。然后就在写一个最普通的:
这就是printf()最普通的使用方法,然后就是这里打印的是字符串,如果打印数值的话就是:
这里的区别除了要打印是项目不一样之外,就是转换说明符了,装换说明符是什么东西嘞,就是printf里面的那个%+字母这个东西。装换说明符的不同也就代表了你要打印的项目类型也是不一样的,那么c语言大概有哪些装换说明符嘞:
这些就是鄙人至今学习c语言知道的装换说明符了,也许还有鄙人没有写出来的,还望各位看官海涵和补充。
1.2:占位符
printf() 可以在输出⽂本中指定占位符。所谓 “占位符”,就是这个位置可以⽤其他值代⼊。好比排队,你有事叫你朋友帮忙占位置,当你在去排队的时候,因为不能插队,所以你朋友就把位置让给了你,他自己去排其他的了。就是一个代替。
在这里%d就是所谓的占位符,而要代替的值就是后面的19。也可以是这样的
用变量的名字来写,效果是一样的。当然也可以写多个占位符如:
这里只是写了2个占位符但是还可以更多,使用者可以根据需要来使用占位符的多少。下面我列举了一些可能会用上的占位符:
%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 类型。
%% :输出⼀个百分号。
1.3:输出格式
看到这里,各位看官应该也看见我每个图片里面printf()的格式都是差不多的吧。大体就是printf("装换说明符",待打印项目)。这个就是printf的输出格式。你也可以不适用装换说明符,直接打印,你需要将要打印的项目放在英文输入法的""里面这样就可以运行看效果了,但是一看这个代码就比较挫,感觉没有技术含量,所以个人还是比较推荐大家使用上面的方式,并且上面的方式对于以后的使用也是很便利的。
还要一个很重要的就是,引入头文件,各位可以看到,我的每一张图片里面都会有一个#include<stdio.h>这就是要想使用printf这个库函数的条件,如果不引用stdio.h这个头文件的话那么可能会在你运行代码的时候弹出一个警告,内容是printf为定义:
2.1:scanf的基本用法
接下来我们来看scanf函数。这是C语言中最通用的一个C函数,因为它可以读取不同格式的数据。我们键盘上只能输入字母,字符和数字,scanf函数能将输入的字符串转换成整数、浮点数、字符或字符串,这种方式恰好于printf()相反。格式形式和printf类似,也使用格式字符串和参数列表。scanf()中的格式字符串表明字符输入流的目标数据类型。两个函数主要的区别在参数列表中。printf()函数使用变量、常量和表达式,而scanf()函数使用指向变量的指针。一般来说,对基本变量的使用赋值,用在变量前加一个&(意思为取地址);字符串数组本质其实就是一个指针,所以不要使用&。当然scanf使用也是需要引入stdio.h这个头文件的。
这就是scanf的基本用法,printf是因为方便我们看输入与输出的值是否相同。
然后这是char类型,字符串数组,区别就是在scanf里面因为用&(取地址)符号。但是其他的类型数组还是需要使用&符号的。
以上是输入单个,当我们想要输入多个的时候,我们一个这样书写:
需要书写多少个项目那么就要写多少个格式字符串,错误的书写方式:
2.2scanf的返回值
scanf()函数返回成功读取的项数,就是如果读取正确的画会返回读取项数的个数。如果没有读取任何项,且需要读取一个数字而用户却输入一个非数值字符串,scanf()便返回0。当scanf()检测\n到“文件结尾”时,会返回EOF(EOF是stdio.h中定义的特殊值,通常用#define指令把EOF定义为-1)。所以当我们想要多次进行赋值时,可以用while语句,然后以等于EOF作为结束条件。在VScode(gcc)编译环境下以CTRL+z作为EOF。但你想下面以scanf为循环条件且没有代码跳出循环的话,需要自己按三遍Ctrl+z,这样就是说明遇到了文件末尾,所以就强制结束了。
2.3占位符
scanf的占位符与printf的占位符大致一样,并且向scanf里面输入值的时候格式需要与scanf里面的格式一样:
%c :字符。
%d :整数。
%f : float 类型浮点数。
%lf : double 类型浮点数。
%Lf : long double 类型浮点数。
%s :字符串。
%[ ] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] )
这就是当输入的格式与scanf格式不一样的话,使用起来除了格式相同的,其他的都会因为格式的不同从而导致编译器读取错误,变成一个错误值。
这样就是正确的,虽然我这个格式容易让人产生错觉,但效果是正确的。
上⾯所有占位符之中,除了 %c 以外,都会⾃动忽略起⾸的空⽩字符。 %c 不忽略空⽩字符,总是返回当前第⼀个字符,⽆论该字符是否为空格。
下⾯要特别说⼀下占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个⾮空⽩字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。\n因为 %s 不会包含空⽩字符,所以⽆法⽤来读取多个单词,除⾮多个 %s ⼀起使⽤。这也意味着,scanf() 不适合读取可能包含空格的字符串,⽐如书名或歌曲名。另外, scanf() 遇到 %s 占位符,会在字符串变量末尾存储⼀个空字符 \\0。\n\nscanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串时,很可能会超过数组的边界,导致预想不到的结果。为了防⽌这种情况,使⽤ %s 占位符时,应该指定读⼊字符串的最⻓⻓度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表⽰读取字符串的最⼤⻓度,后⾯的字符将被丢弃。
这就是鄙人今天想与各位看官分享的scanf与printf的一些拙见,如果有那些不对的地方,还望在下面评论留言,方便鄙人更改。