赞
踩
scanf将键盘输入的字符串根据转换规范,转换成二进制表示的整数、浮点数、字符或
字符串等。
根据用户的输入 赋值给程序的数据
举个例子
#include <stdio.h>
int main()
{
char c;
short s;
int n;
long l;
float f;
double df;
scanf("%hhd %hd %d %ld %f %lf", &c, &s, &n, &l, &f, &df);
printf("%d %d %d %d %f %f\n", c, s, n, l, f, df);
return 0;
}
运行程序后,在键盘输入:“11 22 33 42 5.6 71.8”。scanf函数,将字符串"1 2 3 4 5.6 7.8",根据转换规范,
分别转换为各类二进制数据,并存储到变量中
scanf("%hhd %hd %d %ld %f %lf", &c, &s, &n, &l, &f, &df);
scanf("%d %ld %f %lf", &c, &l, &f, &df);
可以根据需求调整参数数量 类型也可调整
scanf("%d %ld %f %lf", &c, &l, &f, &df);
"%d %ld %f %lf" 被双引号包裹 字符串
scanf("%d %ld %f %lf", &c, &l, &f, &df);
%d %ld %f %lf 就是和输入信息匹配的字符串
根据转换规范 把输入的信息转为对应的数据类型
scanf("%d %ld %f %lf", &c, &l, &f, &df);
%d(空格)%ld(空格)%f(空格)%lf
那么输入 也需要用空格进行分开 保持格式一致 12 44 12.02 45.2
scanf("%d,%ld,%f,%lf", &c, &l, &f, &df);
%d,%ld,%f,%lf 如果是逗号的话输入 就需要用逗号隔开 12,44,12.02,45.2
scanf("%d %ld %f %lf", &c, &l, &f, &df);
&c, &l, &f, &df
就是把输入的信息转为对应的类型 存放的位置
前面几个输入 后面介个接受
前面的类型 和后面的接受类型一致
不同转换规范代表的转换方式如下表:
长度指示符 | 转换规范 | 转换为某种类型的二进制 |
---|---|---|
hh | d | char |
h | d | short |
无 | d | int |
l | d | long |
ll | d | long long |
hh | u | unsigned char |
h | u | unsigned short |
无 | u | unsigned int |
l | u | unsigned long |
ll | u | unsigned long long |
无 | f | float |
l | f | double |
无 | c | 字符对应的ASCII码 |
无 | s | 字符串中字符对应的ASCII码 |
用法
输入 浮点型float
找到 float 查看占位符 %f
输入 unsigned short
找到unsigned short查看占位符 %hu
长度正确但类型错误
#include <stdio.h>
int main()
{
long long ll;
scanf("%lf", &ll);
printf("%lld\n", ll);
printf("%f\n", ll);
return 0;
}
输入字符串数值大于转换类型取值范围
#include <stdio.h>
int main()
{
short s;
scanf("%hd", &s);
printf("%d\n", s);
return 0;
}
我们输入了字符串 “2147483467” name超出了hd 的范围 无法得出正确的结果
变量放不下转换结果
#include <stdio.h>
int main()
{
short s;
scanf("%d", &s);
printf("%d\n", s);
return 0;
}
把int 转入 short
我们输入了字符串 “2147483467” ,该字符串被转换规范 “%d” 匹配。
接下来,字符串 “2147483467” 将被转换为int类型的二进制表示,4个字节。
最后,转换后的4个字节的数据被short类型的变量s接收,丢失了2个字节。
所以,无法得出正确的结果
解决就是
使用scanf的时候请注意,输入字符串的数值与转换规范和接收转换结果的变量类型必须匹配才能得到 正确结果
占位符 和数据类型要一一对应
#include <stdio.h>
int main()
{
//整形输入
char a;
short b;
int c;
long d;
long long e;
scanf("%hhd %hd %d %ld %lld",&a, &b, &c, &d, &e);
printf("%hhd %hd %d %ld %lld", a, b, c, d, e);
return 0;
}
float f;
double lf;
scanf("%f %lf",&f,&lf);
char ch;
scanf("%c",&ch);
char str[20];
scanf("%s", str);//不需要&
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。