C语言scanf()输入函数的用法(非常详细)
scanf() 是 C语言中最常用的一个输入函数,它的功能是按照指定的格式接收用户在键盘上输入的数据,最后将数据存储在指定的变量中。
scanf() 函数的一般格式如下:
注意,当输入的数据是基本类型,如整型、字符型、实型时,需要使用取地址符号。当输入的变量本身就是一个地址时,如数组名、字符串指针等,不需要再使用“&”符号。
【实例 1】输入身高和体重,计算身体质量指数(BMI),计算公式为“BMI=体重/身高2”。
运行程序,结果为:
程序是怎样将输入的内容分别保存到两个指定变量中的呢?scanf() 函数使用空白字符分隔输入的数据,这些空白字符包括空格、换行和制表符(tab),本例中使用了空格作为空白字符。
注意,使用 scanf() 函数输入数据时,实际输入的变量格式必须与 scanf() 函数参数中指定的变量格式、顺序一一对应。例如:
【实例 2】依次使用 scanf() 函数的附加格式进行格式输入,对比输入前后的结果,观察附加格式的效果。
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() 函数将获取的输入数据输出。
运行程序,结果为:
scanf() 函数的一般格式如下:
scanf(格式控制, 地址列表)“地址列表”参数用于给出接收数据变量的地址;格式控制是用双引号括起来的字符串,可以容纳多个格式字符,下表列出了 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; /* 程序结束 */ }
- 为了能接收用户输入的整型数据,定义了两个实型变量 height 和 weight。
- scanf() 函数只能接收输入的数据,不能显示信息,所以先使用 printf() 函数输出一段信息提示。
- 调用 scanf() 输入函数,在函数参数中使用双引号将格式字符括起来,“%f”表示输入的是十进制的小数。在参数中的地址列表位置使用“&”符号表示变量的地址。
- 变量 height 和 weight 得到用户输入的数据后,根据公式计算 BMI 值,再调用 printf() 函数将 BMI 值输出。注意,printf() 函数使用的是变量的标识符,而不是变量地址。scanf() 函数使用的是变量地址,而不是变量的标识符。
运行程序,结果为:
请输入身高、体重: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() 函数还有附加格式,用于更为具体的格式说明,如下表所示。附加字符 | 功能说明 |
---|---|
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