首页 > 编程笔记 > C语言笔记 阅读:21

C语言scanf()输入函数的用法(非常详细)

scanf() 是 C语言中最常用的一个输入函数,它的功能是按照指定的格式接收用户在键盘上输入的数据,最后将数据存储在指定的变量中。

scanf() 函数的一般格式如下:
scanf(格式控制, 地址列表)
“地址列表”参数用于给出接收数据变量的地址;格式控制是用双引号括起来的字符串,可以容纳多个格式字符,下表列出了 scanf() 函数中常用的格式字符。

表 1 scanf() 函数的格式字符
格式字符 功能说明
%d, %i 用来输入有符号的十进制整数
%u 用来输入无符号的十进制整数
%o 用来输入无符号的八进制整数
%x, %X 用来输入无符号的十六进制整数(大小写作用相同)
%c 用来输入单个字符
%s 用来输入字符串
%f 用来输入实数,以小数形式输入
%e, %E 用来输入实数,以指数形式输入
%g, %G 用来输入实数,与 %f 和 %e 作用相同

格式字符“%s”用来输入字符串。将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志“\0”作为最后一个字符。

例如,得到一个整型数据的代码如下:
int n;
scanf("%d",&n);
在上面的代码中,“&”是取地址符号,表示取变量 n 的地址。用户不用关心变量的地址具体是多少,只要在变量的标识符前加“&”,就可以表示存取变量的地址。

注意,当输入的数据是基本类型,如整型、字符型、实型时,需要使用取地址符号。当输入的变量本身就是一个地址时,如数组名、字符串指针等,不需要再使用“&”符号。

【实例 1】输入身高和体重,计算身体质量指数(BMI),计算公式为“BMI=体重/身高2”。
#include <stdio.h>

int main() {
    float height, weight; /* 定义 height 为身高,weight 为体重 */
    double BMI; /* 定义身体质量指数 BMI */
    printf("请输入身高、体重:"); /* 提示信息 */
    scanf("%f %f", &height, &weight); /* 输入身高、体重 */
    BMI = weight / (height * height); /* 计算 BMI 值 */
    printf("您的身体质量指数(BMI):%.2f\n", BMI); /* 输出 BMI 值 */
    return 0; /* 程序结束 */
}

运行程序,结果为:
请输入身高、体重:1.5 52
您的身体质量指数(BMI):23.11

程序是怎样将输入的内容分别保存到两个指定变量中的呢?scanf() 函数使用空白字符分隔输入的数据,这些空白字符包括空格、换行和制表符(tab),本例中使用了空格作为空白字符。

注意,使用 scanf() 函数输入数据时,实际输入的变量格式必须与 scanf() 函数参数中指定的变量格式、顺序一一对应。例如:
scanf("%d %c %f ",&a,&b,&c);
这里要求输入 3 个变量,格式分别是整型、字符型和浮点型,数据间采用空格进行分隔。用户通过控制台实际输入时,也必须按照这样的格式及顺序进行。如果 scanf() 函数里使用的格式列表是这样的“%d#%c#%f”,那么在输入数据时,就需要使用“#”进行分隔。

C语言scanf()函数的高级用法

scanf() 函数还有附加格式,用于更为具体的格式说明,如下表所示。

表 2 scanf()函数的附加格式说明字符
附加字符 功能说明
l 用于输入长整型数据(如 %ld、%lo、%lx、%lu)以及 double 型数据(如 %lf、%le)
h 用于输入短整型数据(如 %hd、%ho、%hx)
n 用于指定输入数据的字段宽度,多余的数据将被忽略
* 表示指定的输入项在读取后不赋给相应的变量

【实例 2】依次使用 scanf() 函数的附加格式进行格式输入,对比输入前后的结果,观察附加格式的效果。
#include <stdio.h>

int main() {
    long iLong; /* 长整型变量 */
    short iShort; /* 短整型变量 */
    int iNumber1 = 1; /* 整型变量,为其赋值 1 */
    int iNumber2 = 2; /* 整型变量,为其赋值 2 */
    char cChar[10]; /* 定义字符数组变量 */

    printf("Enter the long integer\n"); /* 输出信息提示 */
    scanf("%ld", &iLong); /* %ld,输入长整型数据 */

    printf("Enter the short integer\n"); /* 输出信息提示 */
    scanf("%hd", &iShort); /* %hd,输入短整型数据 */

    printf("Enter the number:\n"); /* 输出信息提示 */
    scanf("%d %d", &iNumber1, &iNumber2); /* %d %d,输入整型数据,忽略第 2 个输入的数 */

    printf("Enter the string but only show three character\n"); /* 输出信息提示 */
    scanf("%3s", cChar); /* %3s,输入字符串,只接收前 3 个字符 */

    printf("the long integer is: %ld\n", iLong); /* 显示长整型值 */
    printf("the short integer is: %hd\n", iShort); /* 显示短整型值 */
    printf("the Number1 is: %d\n", iNumber1); /* 显示整型 iNumber1 的值 */
    printf("the Number2 is: %d\n", iNumber2); /* 显示整型 iNumber2 的值 */
    printf("the three character are: %s\n", cChar); /* 显示字符串 */
    return 0;
}
分析一下程序:
1) 为了 scanf() 函数能接收数据,需要在程序代码中先定义所使用的变量。为了演示不同格式字符的情况,定义的变量类型有长整型、短整型和字符数组。

2) 使用 printf() 函数显示提示信息,提示待输入的数据为长整型,调用 scanf() 函数使变量 iLong 得到用户输入的数据。在 scanf() 函数的格式控制部分,使用格式字符 %ld 表示长整型。

3) 再使用 printf() 函数显示提示信息,提示输入的数据为短整型。调用 scanf() 函数时,使用格式字符 %hd 表示短整型。

4) 使用格式字符“*”的作用是表示指定的输入项在读入后不赋给相应的变量。具体分析如下:第一个“%d”是输入 iNumber1 变量,第二个“%d”是输入 iNumber2 变量,但是在第二个“%d”前有一个“*”附加格式说明字符,这样第二个输入的值被忽略,也就是说,iNumber2 变量不保存输入的值。

5) “%s”是用来表示字符串的格式字符,将一个整数 n 放入“%s”中间,可以指定数据的宽度。在程序中,scanf() 函数中指定的数据宽度为 3,因此在输入字符串时只接收前 3 个字符。

6) 利用 printf() 函数将获取的输入数据输出。

运行程序,结果为:
Enter the long integer
100
Enter the short integer
10
Enter the number:
1 1
Enter the string but only show three character
c.biancheng.net
the long integer is: 100
the short integer is: 10
the Number1 is: 1
the Number2 is: 1
the three character are: c.b

相关文章