课堂笔记
printf()
函数,意思是按照指定的格式打印,’f’的意思是“format”//格式化;printf()
函数中的占位符和参数是一一对应的,如果有n个占位符,就应该有n+1个占位符;- 常见占位符:%d(整型),%s(字符串),%c(字符),%e(十六进制的浮点数,字母输出是小写),%A(十六进制的浮点数,字母输出是大写),… …;
- printf()函数输出格式:例:
printf(“%5d”,xx)
,输出整型最少占5位,不足5位左边补空格;printf(“%-5d”,xx)
,输出整型最少占5位,不足5位右边补空格,printf(“%12f”,xx)
,输出浮点数最少占12位(含小数位),不足12位左边补空格//单精度浮点数小数位默认6位小数,printf(“%.5f”,xx)
,输出浮点数小数位5位,printf(“%*.*fl”,m,n,f)
,m,n分别代替*,… …; - 在VS里面用
scanf()
函数不安全,需要改成scanf_s()
,或者在第一行加入#define _CRL_SECURE_NO_WARNINGS
,最好用后者的方法,因为scanf_s()
不是库函数,只支持VS,其他IDE不支持,在新建模版newc++file.cpp中加入这句话,以后新建的.c文件开头自动包含次短代码; scanf()
函数会自动过滤空格,制表符,换行符,但是%c不会忽略空格,只要scanf(“ %c”,xxx)
//%前加‘ ’,就可以忽略空格;scanf()
函数如果是%s,遇到空格会停止;scanf()
读取字符串并赋值给数组的时候可能会越界,scanf不会管数组的长度,所以在用scanf()
给字符串数组赋值时,要这样写:scanf(“%ms”,xxx)
,m代表读取的字符个数;- 用
scanf(“%d%*c%d%*c%d”,xx,xx,xx)
,给输入设定格式,例:输入1988-02-18,输出1988 02 18; scanf()
的返回值是在键盘上读取的数据个数,如果没读取任何值,即EOF,返回值是-1;- C语言支持的三种结构语句形式:顺序结构,选择结构,循环结构;
- 选择语句中,else默认只会和最近的if语句匹配;
- 关系操作符表达式不能连续写,否则表达式从第一个式子开始判断,如果为真,就会变成1,否则会变成0;
学习总结
- scanf()函数中的参数对应的占位符必须与对应的变量类型保持一致,实际输入时,若输入的类型与预设的变量类型格式不一致,每个参数读取时,读到不属于自己变量类型的字符时才停止;printf()函数的占位符可不参数对应的变量类型一致,但是输出的结果也会与预想的不一致,例:
#include<stdio.h>
int main()
{
int a=0;
char b=0;
float c=0.0f;
scanf("%d%c%f",&a,&b,&c);
printf("%c,%d,%d\n",a,b,c);
return 0;
}
上述代码若输入10,3.14,3.14,输出则为10 ,51 ,536870912,b读取的是3(以字符3接收),因为字符也属于整型,根据ASCII码表,直接转换为51输出整数,c读取的是0.14,以二进制存储后,再以整型输出就是个很大的数字;
- 常用占位符:
%d:整型类型,对应int;
%c:字符类型,对应char;
%s:字符串类型,对应char;
%f:单精度浮点数,对应float;
%lf:双精度浮点数,对应double,输出是%f;
%u:无符号整型,对应unsigned int;
%o/%x:八进制/十六进制整型,占位符的字母大小写决定输入输出的字母大小写,若"%#o"/“%#x”,则在数字前带o/ox;
%p:指针;
%ld:长整型,对应long;
%lu:无符号长整型,对应unsigned long;
%lld:加长整型,对应long long;
%hd:短整型,对应short;