【scanf】的情况
1、char a,b;
scanf("%c%c%c",&a,&b) //缺少一个地址表列
后果:编译器不识别错误,但程序运行出错
2、char a,b,c;
scanf("%c%c",&a,&b,&c) // 多一个地址表列
后果:无影响
3、char a[10],b;
scanf("%s%c",a,&b); //如果在%s%c之间不加空格,%s会吃掉下一个字符【换行也是一个字符】
//正确写法:scanf("%s %c",a,&b);
4、int a; char c,d;
scanf("%d%d%c%c%c%c",&a,&a,&c,&c,&d,&d);
//scanf("");相当于给变量赋值,连续对同一个变量输入,以最后一个为准
5、int a,b; char c,d;
scanf("%d%d%c%c",&a,&b,&c,&d);
//数字之间可以用空格、换行分隔
//数字和字母之间不能用任何符号分隔,但可以在编辑时在%d和%c 之间加空格(scanf("%d %c",&a,&b);),这样便可以输入空格、tab或换行,也可以不输入
解释:除%c之外的其他格式符在输入之前的空白会被跳过,值之后的空白表示该值的结束,所以用%s输入时字符串不能包含空格,%d和%c之间也不能用空格隔开
6、扫描集【见百度】(可以不知道)
7、scanf函数有返回值:返回正确输入并存储的变量个数
8、char a[5],b[4];
scanf("%s%s",a,b); //当对a数组赋值超过下标有效性(编译器不做检查),会将其他字符存储在紧随其后的内存位置
【printf】的情况
1、缺少一个变量(输出无意义乱码)
2、多了一个变量(不影响)
3、如何输出%号 // printf("%%");输出一个%
//【思考】int a=3;printf("%%d",a); 的 输出结果是什么
4、输出字符串数组的方法(数组名、数组元素、指针)
5、printf("%#x",a); //以16进制形式输出,且输出前导0x
printf("%#o",a); //以 8 进制形式输出,且输出前导0
6、printf("%d",1); //正确,输出结果是1
7、#include<stdio.h>
int main()
{
int a=3;
printf("%f",a); //格式不匹配
}
编译不出错,但运行出错
#include<stdio.h>
int main()
{
int a=3;
printf("%f",a);
}
编译不出错,输出结果是0;