🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## Scanf函数基本概念 ### scanf函数介绍 - scanf函数是一个阻塞式函数 + 程序会停在`scanf`函数出现的地方, 直到接收到数据才会执行后面的代码 - scanf函数原型包含在标准输入输出头文件`stdio.h`中,用于接受键盘输入的内容。 + 格式:scanf("格式控制字符串",输入项地址列表); + 例如: scanf("%d", &num); + 格式控制字符串: * 规定数据输入的格式,由格式控制符和普通字符组成,格式控制符和百分号(%)一起使用, 用来说明输入数据的数据类型(格式字符)。 + 输入项地址列表: * 需要接收数据的变量地址,这些输入项与格式控制字符串在类型和数量上要对应,当有多个 输入项时,各个地址名之间以逗号“,”分隔。输入格式和变量类型要保持一致。 > 在C语言中,一个变量的地址可以通过地址运算符&得到。例如:定义int a,b;则a,b的 地址为&a,&b ### scanf函数格式控制符 |格式|意义| |--|--| |d|输入一个十进制整数| |o|输入一个八进制整数| |x|输入一个十六进制整数| |i|输入一个有符号或无符号的十进制、八进制、十六进制整数| |u|输入一个无符号十进制整数| |f 、e或E、 g或G|输入一个小数形式或指数形式的浮点数| |c|输入一个字符| |s|输入一个字符串| - 获取整形数据 ``` // 1.定义变量用于接收输入数据 int num = 0; // 2.利用scanf函数接收用户输入数据 scanf("%d", &num); // 3.打印验证结果 printf("num = %d", num); ``` - 获取实数型数据 ``` // 1.定义变量用于接收输入数据 float num = 0; // 2.利用scanf函数接收用户输入数据 scanf("%f", &num); // 3.打印验证结果 printf("num = %d", num); ``` - 非法的输入 + 除"空格","回车","tab"之外, 如果输入的数据和scanf接收的数据不匹配将会自动结束接收 ## Scanf函数注意事项 ### scanf使用注意事项 - 如果在输入时,输入了多个空格、回车、Tab都会被系统忽略的 - 如果要获取的内容是多个整数,中间输入了多个空格、回车、Tab都会被系统忽略 - 如果要获取的内容是多个实型,中间输入了多个空格、回车、Tab都会被系统忽略 - 非法的格式输入,得不到想要的结果 - 混合整形和字符型数据接收 + 当整形的数和字符混合输入时,要避免“空格” 添麻烦 + 为防止混合输入空格造成的错误,可以通过添加普通的分隔符解决 - 关于使用"\n"的问题 + scanf函数当遇到回车的时候,会结束执行 + 所以在scanf中,尽量不要使用 \n + 如果在scanf中使用了\n, 需要原样输入"\n" ## Scanf函数实现原理 ### scanf的运行原理 - 系统会将用户输入的内容了放入输入缓冲区 - scanf方式会从输入缓冲区中逐个取出内容赋值给格式符, 如果类型不一致不会修改原有数据 - 如果输入缓冲区的内容不为空,scanf会一直从缓冲区中获取,而不要求再次输入