C程序设计scanf函数

前言

本人在自学C语言的时候,阅读教程C程序设计(第五版,谭浩强著),其中有一个例题1.3,我敲出来的源代码没有任何问题,但是在效果上没有达到预期。我会在scanf函数介绍时分享我的错误。


对于scanf函数

首先我们需要清楚:scanf函数是用来输入数据的函数。操作系统在接收键盘数据时都是把它当作字符来处理的。例如从键盘上输入123,在操作系统看来是字符123。于是我们要想得到自己希望的数据,需要通过格式控制实现。

其次我们需要清楚:&是地址符,表示取某变量的地址。例如变量a,那么&a的含义是“变量a的地址”。


scanf函数的表达形式:scanf(格式控制,地址表列)

格式控制:

1.格式控制本质是用双撇号括起来的一个字符串。例如“%d”,声明了你规定的数据类型是十进制整数,需要关注的是,在用键盘输入123的时候,操作系统把字符123经过%d转化为十进制整数。

2.我们把%d称为输入控制符,简单理解就是控制输入的数据;与之相应的还有非输入控制符,简单理解就是不受控制的输入的数据,需要原样输入。

举个例子,格式控制为“a =%d”或“%d,%d”时,前者的'a ='是非输入控制符,后者的逗号','是非输入控制符。在用键盘输入数据时,这些非输入控制符需要原样输入,如前者得在键盘上输入'a =3',后者得输入'4,5',这里的数字3,4,5是我随意说的,实际输入得根据你自己的需要。正是因为非输入控制符,所以我本人在这逗号上面犯了错误。

值得说明的是非输入控制符包括逗号、空格和换行符等其他字符。简单理解除了%d这样的格式声明(也就是输入控制符)之外,其它的都算非输入控制符。

3.在格式控制的时候,我们一般不带非输入控制符,因为非输入控制符要原样输入的,有几个输入几个,还不能有改动。而且对于逗号而言,中英文还是不同的。

地址表列:

1.由若干地址组成的表列(表列即列表)

若干个地址用逗号隔开形成一个地址表列,如&a,&b,&c

2.输入的数据在经过格式控制转变为规定的数据类型后,把数据放到变量的地址,然后把数据赋值给变量。

举个例子,对于scanf("%d%d",&a,&b),我们从键盘上输入3 4(这里34中间有个空格,后面解释),操作系统把字符3和4转变为十进制整数后,把3和4分别存入变量a和变量b的地址,然后把这两个整数分别赋给变量a和b。

另外当用 scanf 从键盘给多个变量赋值时,需要注意:

从键盘输入数据时,给多个输入的值之间一定用空格、回车或Tab键隔开,这是用以区分给不同变量输入的值。而且空格、回车或Tab键的数量不限,有就行。

你可能感兴趣的:(c语言,c++,开发语言)