下面是以代码形式写的笔记,拷贝到IDE中即可查看并运行示例:
#include <stdio.h>
int main(void)
{
//scanf函数第一个参数为字符串,其中有占位符,后面的变量与前面的占位符一一对应
//如果scanf将转换后的二进制存储到基本变量当中,请在变量名前加&。
//如果scanf将字符串存储到字符数组中,字符数组名不用加&。
//输入时需要按照字符串中的排列方式
//后面用于接收的变量也需要与前面匹配,不皮面
//下为示例代码:
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);
//输入1 2 3 4 5.6 7.8
//输出1 2 3 4 5.600000 7.800000
//
//常见bug
//长度正确但类型错误
//输入字符串数值大于转换类型取值范围
// 变量放不下转换结果可以接收但是可能丢失数据,如:
short q;
scanf("%hd", &q);
printf("%d\n", q);
//输入21478247824723
//输出-685
//总结:
//输入字符串的数值与转换规范和接收转换结果的变量类型必须匹配才能得到正确结果
//
// 字符和字符串
//输入字符的常规方法,如下面的示例
char cha;
scanf("\n%c", &cha);
printf("%d %c\n", cha, cha);
//输入A
//输出 65 A
//注意,这个地方如果scanf不加\n将出现非常诡异的bug
//详见我的博客http://t.csdnimg.cn/xx90w
//对于字符串而言,需要输入到字符数组当中
char str[10];
scanf("%s", str);
printf("%s", str);
//输入hello
//输出hello
//
//注意:printf的参数由于自动类型提升,%d,%f在比int/double低级的均可使用
//但scanf是直接把转换结果送到接收变量中,必须严格使用转换规范
return 0;
}