scanf函数是C语言中用于从标准输入流中读取数据的函数。它的原型如下:
int scanf(const char *format, ...);
scanf函数根据format字符串中的格式控制符,从标准输入流中读取相应类型的数据,并将其存储到对应的变量中。读取的数据以空白字符(空格、制表符、换行符)为分隔符。
下面是一些常用的格式控制符及其作用:
%d
:读取一个有符号十进制整数。
%f
:读取一个单精度浮点数。
%lf
:读取一个双精度浮点数。
%c
:读取一个字符。
%s
:读取一个字符串。
%u
:读取一个无符号十进制整数。
%x
:读取一个无符号十六进制整数。
%o
:读取一个无符号八进制整数。
scanf函数返回成功读取的参数个数,若出现错误则返回EOF。在读取字符串时,scanf函数会在读取到空白字符之前停止,并将空白字符留在输入流中。
需要注意的是,scanf函数在读取数据时需要保证输入流中的内容与格式控制符匹配,否则可能会导致错误的输出结果。为了避免这种情况,我们可以使用scanf函数的返回值来检查是否成功读取了预期的参数个数。
另外需要注意的是,scanf函数对于字符串类型的输入会自动在末尾添加一个空字符’\0’。因此,在定义字符串时需要保证足够的缓冲区空间。如果是读取固定长度的字符串,可以使用限定符%ns来限制读取的字符个数,比如%10s表示读取最多10个字符的字符串。
此外,scanf函数还可以通过在格式控制符前添加修饰符来修改读取行为,比如:
*
:跳过该参数的读取。
h
:读取short类型的数据。
l
:读取long类型的数据。
L
:读取long double类型的数据。
总之,scanf函数是C语言中常用的输入函数,可以根据格式控制符从标准输入流中读取各种类型的数据。使用时需要注意数据的格式匹配和输入的错误处理。