2.7.2 字符输入函数getchar和格式输入函数scanf
1.字符输入函数getchar
getchar函数的作用是从终端输入一个字符。
getchar函数没有参数,其一般形式为
getchar( )
函数返回从输入设备上得到的字符。
例2-11 输入单个字符。
在运行时,如果从键盘上输入字符t并按回车键,就会在屏幕上显示输出的字符t。
t (输入字符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函数输入数据。
运行时按以下方式输入a、b、c的值:
20 65 234896 (输入a、b、c的值)
20,A,234.895996 (输出a、b、c的值)
scanf函数的作用是按照a、b、c在内存的地址将a、b、c的值存储到对应存储单元,如图2.7.1所示。变量a、b、c的地址是在编译连接阶段分配的。
图2.7.1 变量a、b、c存储情况
%d%c%f表示第一个数按十进制整数形式输入,第二个数按字符型(或整型)数据输入,第三个数按浮点型数据输入。输入数据时,在两个数据间用一个或多个空格隔开,也可用回车键、跳格键tab。下面输入均合法:
①20 65 234.896
②20
65 234.896
③20(按tab键)65
234.896
用%d%c%f格式输入数据时,不能用逗号作两个数据间的分隔符,下面输入不合法:
20,65,234.896
scanf函数常用的格式字符及其作用如表2.7.3所示。
表2.7.3 scanf( )中常用的格式字符及其作用
在格式说明中,在%和上述格式字符间可以插入附加符号(修饰符)。如表2.7.4所示。
表2.7.4 scanf( )中的附加格式说明符及其说明
使用scanf函数时应注意的问题:
1)scanf函数中的参数是地址形式:&变量名(除数组或指针变量),而不是变量名。
2)输入数据是在程序运行中输入,输入的数据个数和类型必须与格式说明符一一对应。
3)格式控制字符串中有普通字符时,必须照原样输入。例如:
scanf ("a=%d,b=%d",&a,&b);
输入的形式是:a=32,b=28
4)格式符之间若无普通字符,则
①输入的数值型数据用空白符(空格、tab键或回车键)分隔,或指定数据输入的宽度,让系统自动按它截取所需数据,例如:
scanf ("%d%d%d",&a,&b,&c);
输入:34 52 67 (而34,52,67为非法)
scanf ("%4d%d",&a,&b);
输入:4567893
系统自动将前4位(即4567)赋予变量a,剩下的数据(即893)赋予变量b。
②输入的 char型数据不必分隔,例如:
scanf ("%c%c%c",&ch1,&ch2,&ch3);
要输入:abc
不能输入:a b c
因为字符型数据只能容纳一个字符,这时系统将第1个字符赋予变量ch1,将第2个字符赋予变量ch2,将第3个字符赋予变量ch3。
③注意数值型数据与char型数据的混合输入,例如:
scanf ("%d%d",&m.,&n);
scanf ("%c",&ch);
错误输入:32 28a
正确输入:32 28a
5)浮点型数据输入时,域宽不能用m.n形式的附加说明,即输入时不能指定精度,例如:
scanf("%5.3f",&i);
是不合法的。
6)如果在%后有 *附加说明符,表示忽略它指定的列数,例如:
scanf("%3d %*4d %2d",&i,&j);
输入数据:
345 6789 45
将345赋予变量i,%*4d表示输入4位整数但不赋予任何变量,然后再输入2位整数45赋予变量j。也就是说,第2个数据6789被忽略。在利用现成的一批数据时,有时不需要其中某些数据,可用此方法将其忽略。
7)为了减少不必要的输入量,除了逗号、分号、空格符以外,格式控制字符串中尽量不要出现普通字符,也不要使用'\n' 、'\t'等转义字符。
常见的编程错误2.6
●在表达式中使用变量之前,忘记对所有的变量赋值。初值能够在定义变量时通过显式赋值语句或通过scanf函数输入值来赋值。
●在scanf函数调用中没有在变量名的前面使用地址运算符&。
●在scanf函数调用中没有包含必须输入的数据值的控制字符串。
●同一表达式多次出现的变量使用自增和自减运算符。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。