2.4.4 格式化输入函数scanf
格式化输入函数其一般格式为:
scanf(控制字符串,参数1,参数2,……,参数n); |
它接受来自键盘的输入,自动把输入的数据转换为规定的格式并存储到由参数指定的变量中。参数必须是以变量地址的形式给出。变量的地址其实就是存储变量的内存单元的编号,第1章的1.5节已经作过介绍。运算符&用于取得变量的地址,如有一个整型变量a,则它的地址为&a。
与printf一样,scanf可以使用的格式字符如下所示。
d:期待输入一个十进制整数。
o:期待输入一个八进制整数。
x:期待输入一个十六进制整数。
u:期待输入一个无符号整数。
c:期待输入一个字符。
s:期待输入一个字符串。
f:期待输入一个浮点数。
e:期待输入一个以科学表示法的表示的浮点数。
与printf类似,可以以%ld的方式输入一个长整型,例2-10演示了格式化输入函数scanf的用法。
例2-10
#include int main() { int i; char c; float f;
scanf("%d%c%f",&i,&c,&f); printf("%d %c %f",i,c,f); scanf(("%d,%c,%f",&i,&c,&f); printf("%d %c %f",i,c,f); } |
程序运行:
123 a 12.5 123 a 12.5 456,b,21.5 456 b 21.5 |
程序说明。
(1)程序运行,等待用户输入,这里输入123、a和12.5,之间以空格间隔,回车后程序在屏幕上打印出3个变量的值。系统怎样知道123是赋给变量i而字符a是赋给变量c的呢?当遇到空格键、制表键或键时,系统认为是一个变量输入的结束。注意,在输出时,printf函数中%d、%c、%f之间有空格,空格作为普通字符在屏幕上会原样输出,所以有了第2行的打印结果。
(2)在第2次要求输入时,我们已经在程序里规定了用逗号分割,此时必须以第3行这样的方式输入,输入数据以逗号隔开。第4行打印出各个变量的值。
(3)那么如果有错误的输入,系统会有什么反映呢?在设计程序时,必须考虑到用户可能不会每次都按照软件的要求正确地输入数据,所以在设计软件时必须考虑对错误输入的处理,否则一旦用户有错误的输入,程序就崩溃了,这样的软件显然是缺乏竞争力的。如果我们在程序第一次要求输入时,输入a123a12.5,然后回车,输入的数据之间没有空格,也没有按或键,会有什么结果呢?结果是系统输出一些奇怪的数。