首页 百科知识 字符输入函数和格式输入函数

字符输入函数和格式输入函数

时间:2022-10-16 百科知识 版权反馈
【摘要】:1)getchar函数需要交互输入,接收到输入字符之后才继续执行程序。%d%c%f表示第一个数按十进制整数形式输入,第二个数按字符型(或整型)数据输入,第三个数按浮点型数据输入。

2.7.2 字符输入函数getchar和格式输入函数scanf

1.字符输入函数getchar

getchar函数的作用是从终端输入一个字符。

getchar函数没有参数,其一般形式为

  getchar( )

函数返回从输入设备上得到的字符。

例2-11 输入单个字符。

img102

在运行时,如果从键盘上输入字符t并按回车键,就会在屏幕上显示输出的字符t。

timg103      (输入字符t后,按“回车”键,字符送到内存)

t       (输出变量i的值t)

注意:

1)getchar函数需要交互输入,接收到输入字符之后才继续执行程序。getchar函数一次只能接收一个字符,它得到的字符可以赋予一个字符型变量或整型变量,也可以不赋予任何变量而作为表达式的一部分。如上例中的第6、7行可用下面一行代替:

  putchar(getchar( ));

因为getchar( )的值是't',因此putchar(getchar( ))输出't'。也可用printf函数

输出:

  printf("%c",getchar( ));

2)连续使用getchar函数时,要注意字符的输入形式,例如,执行程序段:

  char i,j;

  i=getchar();

  j=getchar();

则输入时,必须连续输入两个字符,中间不能有其他字符。

3)函数getchar和putchar是C语言的标准库函数,如果在一个函数中要调用getchar函数和putchar函数,在该函数的前面(或本文件的开头)一定要加上编译预处理命令:

  #include <stdio.h>

2.格式输入函数scanf

  scanf函数的使用格式为

  scanf(“格式控制字符串”,参数1,参数2,…);

接收用户从键盘上输入的数据,按照格式控制的要求进行类型转换,然后送到由对应参数指示的变量单元中去。例如:

  scanf("a=%d,b=%f",&a,&b);

其中,格式控制字符串的含义同printf函数,作用是将输入的数据转换成所指定的输入格式;参数指明输入数据所要放置的地址,所以,出现在参数位置上的变量名前要加上&运算符,表示取变量地址,如上式中的&a,&b。每个格式说明对应一个参数,如上式中的%d对应参数&a,%f对应参数&b。

例2-12 用scanf函数输入数据。

img104

img105

运行时按以下方式输入a、b、c的值:

20 65 234img106896   (输入a、b、c的值)

20,A,234.895996   (输出a、b、c的值)

scanf函数的作用是按照a、b、c在内存的地址将a、b、c的值存储到对应存储单元,如图2.7.1所示。变量a、b、c的地址是在编译连接阶段分配的。

img107

图2.7.1 变量a、b、c存储情况

%d%c%f表示第一个数按十进制整数形式输入,第二个数按字符型(或整型)数据输入,第三个数按浮点型数据输入。输入数据时,在两个数据间用一个或多个空格隔开,也可用回车键、跳格键tab。下面输入均合法:

①20 65 234.896img108

②20img109

65 234.896 img110

③20(按tab键)65img111

234.896 img112

用%d%c%f格式输入数据时,不能用逗号作两个数据间的分隔符,下面输入不合法:

20,65,234.896img113

scanf函数常用的格式字符及其作用如表2.7.3所示。

表2.7.3 scanf( )中常用的格式字符及其作用

img114

在格式说明中,在%和上述格式字符间可以插入附加符号(修饰符)。如表2.7.4所示。

表2.7.4 scanf( )中的附加格式说明符及其说明

img115

使用scanf函数时应注意的问题:

1)scanf函数中的参数是地址形式:&变量名(除数组或指针变量),而不是变量名。

2)输入数据是在程序运行中输入,输入的数据个数和类型必须与格式说明符一一对应。

3)格式控制字符串中有普通字符时,必须照原样输入。例如:

  scanf ("a=%d,b=%d",&a,&b);

输入的形式是:a=32,b=28  img116

4)格式符之间若无普通字符,则

①输入的数值型数据用空白符(空格、tab键或回车键)分隔,或指定数据输入的宽度,让系统自动按它截取所需数据,例如:

   scanf ("%d%d%d",&a,&b,&c);

输入:34 52 67  img117(而34,52,67为非法)

   scanf ("%4d%d",&a,&b);

输入:4567893  img118

系统自动将前4位(即4567)赋予变量a,剩下的数据(即893)赋予变量b。

②输入的 char型数据不必分隔,例如:

  scanf ("%c%c%c",&ch1,&ch2,&ch3);

要输入:abc  img119

不能输入:a b c  img120

因为字符型数据只能容纳一个字符,这时系统将第1个字符赋予变量ch1,将第2个字符赋予变量ch2,将第3个字符赋予变量ch3。

③注意数值型数据与char型数据的混合输入,例如:

  scanf ("%d%d",&m.,&n);

  scanf ("%c",&ch);

错误输入:32 28img121a

正确输入:32 28aimg122

5)浮点型数据输入时,域宽不能用m.n形式的附加说明,即输入时不能指定精度,例如:

  scanf("%5.3f",&i);

是不合法的。

6)如果在%后有 *附加说明符,表示忽略它指定的列数,例如:

  scanf("%3d %*4d %2d",&i,&j);

输入数据:

  345 6789 45img123

将345赋予变量i,%*4d表示输入4位整数但不赋予任何变量,然后再输入2位整数45赋予变量j。也就是说,第2个数据6789被忽略。在利用现成的一批数据时,有时不需要其中某些数据,可用此方法将其忽略。

7)为了减少不必要的输入量,除了逗号、分号、空格符以外,格式控制字符串中尽量不要出现普通字符,也不要使用'\n' 、'\t'等转义字符。

常见的编程错误2.6

●在表达式中使用变量之前,忘记对所有的变量赋值。初值能够在定义变量时通过显式赋值语句或通过scanf函数输入值来赋值。

●在scanf函数调用中没有在变量名的前面使用地址运算符&。

●在scanf函数调用中没有包含必须输入的数据值的控制字符串。

●同一表达式多次出现的变量使用自增和自减运算符。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈