You are on page 1of 12

• 输入函数scanf()

• 格式:scanf(格式控制串,地址表列)
• 功能:利用键盘(或系统指定的其他输入设备),按指定
的格式输入若干任意类型的数据。
int a,b;
scanf("%d%d",&a,&b);
• 函数说明:
(1) “格式控制串”用来指出输入的格式,由“%”和格式
符以及普通字符)组成。
(2)“地址表列”是由若干个地址组成,可以是变量地址或
字符串首地址。 1
常用scanf()格式控制符

d: 输入十进制带符号整数
f,e:输入float单精度实数
c: 输入单个字符
s: 输入一个字符串

2
scanf()的格式修饰符
一般格式:%[m][l][L][h]格式符
说明如下:
m 指定输入数据的位宽
l 加在d、u格式前表示输入long型数据
加在f、e格式前表示输入double型数据
L 加在f、e格式前表示输入long double型数据
h 加在d格式前表示输入short 型数据

3
如何正确输入数据

输入数据时可以分隔多个输入数据的方法:
• 一个或多个空格;
• 回车键、跳格键tab键;
• 达到输入位宽;
• 遇到非法字符。

4
scanf()的格式使用-1
• 使用空格及回车键分隔数据
例如:
int a,b;
float c;
scanf("%d%d%f",&a,&b,&c);
printf(("%d %d %f",a,b,c);

输入:12343.5  输入:12
34
输出:12 34 3.500000 3.5
5
scanf()的格式使用-2
• 使用域宽控制输入数据。
例如:
int a,b;
scanf("%3d%3d",&a,&b);
printf("a=%d,b=%d",a,b);

输入:123456 

输出:a=123,b=456
6
scanf()的格式使用-3
• 数值型数据和字符型数据混合输入方法
例如:
int a,e;
char b,c,d;
scanf("%d%c%c%c%d",&a,&b,&c,&d,&e);
printf("a=%d,b=%c,c=%c,d=%c,e=%d",a,b,c,d,e);
输入:123abc789

输出:a=123,b=a,c=b,d=c,e=789
问题:如果输入字符数据时之间加入了空格,会出现
什么结果?
7
scanf()的格式使用-4
• 格式控制字符串中包含普通字符,输入时必须照原样输
入普通字符,否则将导致输入结束。
例如: 最好不要采用
int a,b,c; 这种方式!
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
printf("a=%d,b=%c,c=%c",a,b,c);

输入: a=1,b=2,c=3

输出:a= 1,b= 2,c= 3


8
scanf()的格式使用-5
• scanf函数的格式控制字符串中尽量不要出现普通字符,
不要将输入提示放在其中,需要提示可调用printf函数。
#include <stdio.h>
int main() 输入:12 345 678.945 
{
a=12,b=345.000000,c=678.95
int a;
double b,c; 输入数据
printf("Please input a b c:"); 提示信息
scanf("%d%lf%lf",&a,&b,&c);
printf("a=%d,b=%f,c=%6.2f\n",a,b,c);
return 0;
} 9
scanf()的格式使用错误
#include <stdio.h> • 程序中数据输入格式用错,
int main() 程序结果如何?
{ • scanf()将读入错误的数据。
float a,b;
scanf("%d%d", &a,&b);
printf("a=%f b=%f\n", a,b);
return 0;
}
输入:12.3 15.6
输出:a=0.000000 b=0.000000
10
scanf()的格式使用错误
#include <stdio.h> • 程序中数据输入格式用错,
int main() 程序结果如何?
{ • scanf()将读入错误的数据。
int a,b;
scanf("%f%f", &a,&b);
printf("a=%d b=%d\n", a,b);
return 0;
}
输入:12 34
输出:a=1094713344 b=1107820544
11
scanf()格式使用小结
小结:
• 采用正确的格式输入数据,是程序运行正确的基础。
• 输入时不允许指定数据的精度。
• 输入时不允许加“\n”。
• 不能使用中文的标点符号。
常见错误:
float a;
double u;
scanf("%f", a); /*缺少地址符*/
scanf("%7.2f", &a); /*格式符前指定了精度*/
scanf("%f\n", &a); /*格式符中使用了换行符*/
scanf("%f",&u); /*双精度型数据使用了单精度格式*/ 12

You might also like