如题所述
scanf是C语言中的一个输入函数,与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include 。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2017-10-13
首先需要#include <stdio.h>
int scanf( const char *format, ... );
scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
第一个参数format为一个常量字符串,这个字符串中如果包含‘%’符号则使用后续参数进行匹配
如:scanf("%d%d", &a, &b);
格式说明符
转换字符(就是%后跟的部分)
a 读浮点值(仅适用于 C99)
A 读浮点值(仅适用于 C99)
c 读单字符
d 读十进制整数
i 读十进制、八进制、十六进制整数
e 读浮点数
E 读浮点数
f 读浮点数
F 读浮点数(仅适用于 C99)
g 读浮点数
G 读浮点数
o 读八进制数
s 读字符串
x 读十六进制数
X 读十六进制数
p 读指针值
n 至此已读入值的等价字符数
u 读无符号十进制整数
[ ] 扫描字符集合
% 读 % 符号(百分号)
附加格式说明字符表修饰符说明
L/l 长度修饰符 输入"长"数据
h 长度修饰符 输入"短"数据
W 整型常数 指定输入数据所占宽度
* 表示本输入项在读入后不赋值给相应的变量
int scanf( const char *format, ... );
scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
第一个参数format为一个常量字符串,这个字符串中如果包含‘%’符号则使用后续参数进行匹配
如:scanf("%d%d", &a, &b);
格式说明符
转换字符(就是%后跟的部分)
a 读浮点值(仅适用于 C99)
A 读浮点值(仅适用于 C99)
c 读单字符
d 读十进制整数
i 读十进制、八进制、十六进制整数
e 读浮点数
E 读浮点数
f 读浮点数
F 读浮点数(仅适用于 C99)
g 读浮点数
G 读浮点数
o 读八进制数
s 读字符串
x 读十六进制数
X 读十六进制数
p 读指针值
n 至此已读入值的等价字符数
u 读无符号十进制整数
[ ] 扫描字符集合
% 读 % 符号(百分号)
附加格式说明字符表修饰符说明
L/l 长度修饰符 输入"长"数据
h 长度修饰符 输入"短"数据
W 整型常数 指定输入数据所占宽度
* 表示本输入项在读入后不赋值给相应的变量
参考资料:
本回答被提问者采纳第2个回答 2020-01-17
函数就是这样设计的
因为C语言的函数都是传值的,函数调用是不可能改变实参的值的
int
i;
foo(i);//这个是不可能改变i的值的
i=foo(j);//重新赋值
foo(&i);//传i的地址,可以改变i的值
因为C语言的函数都是传值的,函数调用是不可能改变实参的值的
int
i;
foo(i);//这个是不可能改变i的值的
i=foo(j);//重新赋值
foo(&i);//传i的地址,可以改变i的值
第3个回答 2019-01-09
%2d---a:在876这个数字中取两位赋给a于是a=87,同时把876中的6自动划为下一个数字,%f---b把87后面的数字给b也就是6于是b=6
lz把2去掉就可以了
lz把2去掉就可以了
第4个回答 2019-01-07
scanf的第二个参数被定义为一个指针(就是一个内存地址)
&运算计算出i的内存地址,然后作为scanf的参数
如果用i的话,就是把i的值当作内存地址作为scanf的参数
显然i=0x00000000,不是一个有效的内存地址(c语言保证0永远不会是任何有效数据的地址)
函数scanf得不到正确的内存地址,难道你觉得它猜得出i的地址吗
&运算计算出i的内存地址,然后作为scanf的参数
如果用i的话,就是把i的值当作内存地址作为scanf的参数
显然i=0x00000000,不是一个有效的内存地址(c语言保证0永远不会是任何有效数据的地址)
函数scanf得不到正确的内存地址,难道你觉得它猜得出i的地址吗