scanf与printf详解

本文详细介绍了C语言中scanf和printf函数的基础用法、占位符及输出格式,包括各自的转换说明符和在处理不同类型数据时的注意事项,以及如何正确使用头文件
摘要由CSDN通过智能技术生成
         各位看官,今天讲的是c语言前期学习一定会使用的两个函数scanf和printf。一个是输入函数一个是输出函数,但他们的工作原理几乎相同,那我们先

目录

1: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的一些拙见,如果有那些不对的地方,还望在下面评论留言,方便鄙人更改。 

  • 33
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值