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

365app官网下载 📅 2025-07-13 04:53:25 👤 admin 👁️ 4595 ❤️ 137
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

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() 函数还有附加格式,用于更为具体的格式说明,如下表所示。

表 2 scanf()函数的附加格式说明字符

附加字符

功能说明

l

用于输入长整型数据(如 %ld、%lo、%lx、%lu)以及 double 型数据(如 %lf、%le)

h

用于输入短整型数据(如 %hd、%ho、%hx)

n

用于指定输入数据的字段宽度,多余的数据将被忽略

*

表示指定的输入项在读取后不赋给相应的变量

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

#include

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

相关推荐

剑网3 无界:给萌新的抓马图文攻略
365bet体育投注网站

剑网3 无界:给萌新的抓马图文攻略

📅 07-06 👁️ 5925
推荐11款数学软件
365app官网下载

推荐11款数学软件

📅 07-04 👁️ 2650
光纤入户箱如何布线与接线?方法是什么?
365app官网下载

光纤入户箱如何布线与接线?方法是什么?

📅 07-04 👁️ 894