scanf
是C语言的标准输入输出库stdio
中提供的库函数,所以在使用它时,需要使用预处理指令#include <stdio.h>
包含stdio.h
头文件。
scanf
的功能是根据由格式化字符串表示的特定格式读取输入。输入参数包括格式化字符串和用以存储输入的变量地址。变量地址(指针)的个数没有限制,但要保证格式化字符串中的转换说明的数量和类型与对应位置的输入变量一致。
scanf(格式化字符串, 变量地址1,变量地址2...)
格式化字符串中包含普通字符和转换说明。调用scanf
函数时,从左边开始依次处理格式化字符串中的信息。
格式化字符串中的普通字符
处理格式化字符串中的普通字符时,scanf
函数的处理方式因字符为空白字符而不同:
- 空白字符。如果在格式化字符串中遇到一个或多个连续空白字符,
scanf
函数会从输入缓冲区中重复读空白字符,直到遇到一个非空白字符为止,并且把该非空白字符放回输入缓冲区,供下次读取。
/************************************
* using_scanf_1.c *
* *
* 格式化字符串的空白字符 *
************************************/
#include <stdio.h>
int main()
{
int x1 = 0;
scanf(" %d", &x1);
int x2 = 0;
scanf(" %d", &x2);
int x3 = 0;
scanf("%d", &x3);
printf("x1 = %d, x2 = %d, x3 = %d\n", x1, x2, x3);
return 0;
}
- 其他字符。如果在格式化字符串中遇到一个非空白字符,scanf
函数将把它与下一个输入字符进行比较。如果两者匹配,则放弃输入字符并继续处理格式化字符串的后续内容;若不匹配,则将该字符放回输入缓冲区,异常退出,不继续处理剩下的格式化字符串。
/*********************************
* using_scanf_2.c *
* *
* 格式化字符串中的非空白字符 *
*********************************/
#include <stdio.h>
int main()
{
int x1 = 0;
scanf("x1 = %d", &x1);
printf("x1: %d\n", x1);
/**********************************
*scanf函数执行完成后,会忽略最后 *
*的换行符,留由下一次scanf调用时 *
*读取。因此这里调用scanf函数时第 *
*一个字符为\n,所以要把\n作为转换*
*说明中的第一个字符 *
**********************************/
scanf("\nx1 = %d", &x1);
printf("x1: %d\n", x1);
return 0;
}