首页 > 编程笔记 > C语言笔记

C语言scanf()函数用法详解

scanf() 函数 C语言中的一个输入函数,它与 printf() 函数一样,都被声明在头文件 stdio.h 里,因此在使用 scanf() 函数时要加上#include <stdio.h>

scanf() 函数是格式输入函数,即按用户指定的格式从键盘把数据输入指定的变量中。scanf() 函数是从标准输入流 stdio(标准输入设备,一般指键盘)中读内容的通用子程序,可以以说明的格式读入多个字符,并保存在对应地址的变量中。

scanf() 函数的使用格式是:
scanf(格式字符串, 可变参数列表);
函数的第一个参数是格式字符串,指定了输入的格式,并按照格式说明符解析输入对应位置的信息,并存储于可变参数列表中对应的指针所指变量的内存中。每一个指针要求非空,并且与字符串中的格式符一一对应。

scanf() 函数返回成功读入的数据项数,函数返回值为 int。

实例代码如下:
scanf("%d %d",&a,&b);
&a 和 &b 中的 & 是寻址操作符,&a 表示变量 a 在内存中的地址,&b 表示变量 b 在内存中的地址,这是初学者不易掌握和理解的地方。

如果 a 和 b 都被成功读入,那么 scanf() 函数的返回值就是 2;如果只有 a 被成功读入,则返回值为 1;如果 a 和 b 都未被成功读入,则返回值为 0;如果遇到错误或遇到 end of file 文件结束,则返回值为 EOF。

end of file 文件结束符为 Ctrl+Z(Windows 环境)或者 Ctrl+D(Linux 环境)。

再举一个例子:
#include <stdio.h>
 
int main(void)
{
    int a,b,c;
 
    printf("Give me the value of a,b,c seperated with whitespaces:\n");
    scanf("%d%d%d",&a,&b,&c);
    printf("a=%d,b=%d,c=%d\n",a,b,c);
    return 0;
}
注意,如果 scanf() 函数中 %d 是连着写的,如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格、Tab 键或 Enter 键)分隔。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”,注意是英文状态的逗号“,”,而不是中文的“,”,写成中文逗号是初学者常犯的错误之一,如果输入两个整数后按 Enter 键,则系统会等到输入第 3 个数,scanf() 函数才能读取完毕。

除了输入整数,用 scanf() 函数还可以输入单个字符、字符串、小数等,例如:
#include <stdio.h>
 
int main()
{
    char letter;
    int age;
    char addr[30]; //字符数组,用于存储30个字符
    float price;
 
    scanf("%c", &letter);
    scanf("%d", &age);
    scanf("%s", addr); //数组可以加&也可以不加&
    scanf("%f", &price);
    printf("输出字母%c。\n", letter);
    printf("年龄%d,地址%s,数字%g。\n", age, addr, price);
 
    return 0;
}
运行程序后的输入和输出结果如下:

z 12 abc 2.4 输出字母z。
年龄12,地址abc,数字2.4。


scanf() 和 printf() 函数虽然功能相反,但是格式控制符是一样的,单个字符、整数、小数、字符串对应的格式控制符分别是 %c、%d、%f、%s,下表给出了 scanf() 函数的格式控制符。

表 1 scanf()函数的格式控制符
格式控制符 说明
%c 读取一个单一的字符。
%hd、%d、%ld 读取一个十进制整型数据,并分别赋值给 short、int、long 型。
%ho、 %o、%lo 读取一个八进制整型数据(可带前缀也可不带),并分别赋值给 short、int、long 型。
%hx、%x、%lx 读取一个十六进制整型数据(可带前缀也可不带),并分别赋值给 short、int、long 型。
%hu、%u、%lu 读取一个无符号整型数据,并分别赋值给 unsigned short、unsigned intunsigned long 型。
%f、%lf 读取一个十进制形式的小数,并分别赋值给 float、double 型。
%e、%le 读取一个指数形式的小数,并分别赋值给 float、double 型。
%g、%lg 既可以读取一个十进制形式的小数,也可以读取一个指数形式的小数,并分别赋值给 float、double 型。
%s 读取一个字符串(以空白符结束)。

声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。