【注】:C语言注重计算机原理解析,多写程序
目的:字符串常量的混合运算与scanf熟练使用
一、环境使用
1、vs中每个项目编译后都是一个exe可执行程序(Windows程序),每次只能启动一个,要设置为启动项目(粗体)
2、在源文件处新建代码
3、单步调试
快捷键F11,可以逐步运行,也可以在断点调试下接单步。
F10是逐过程调试,不进入函数模块
调试的意义在于检查每一步是否按照预期来进行运行
二、大小写转换
三、字符串常量
C语言通过字符数组来存储字符串,没有String类型
用“ ”引起来,‘’是字符型常量
“CHINA"在内存中的存储占据的是6个内存单元,最后一个字符为’\0‘,只是在输出时不显示。
将它赋值给字符数组时要注意是6个内存单元
四、混合运算
4.1 类型强制转换
4.1.1 未进行强制类型
在C语言中,除号“/”的数据类型是由除数和被除数决定的。
4.1.2 进行强制类型转换
要想转换为对应类型就需要运用强制类型转换符:(类型)。把这个表达式的类型转换,不是把字符转换。
五、常用的数据输入/输出函数
C语言通过函数库读取标准输入(scanf),操作系统提供;
printf输出到控制台(标准输出)。
5.1 scanf函数
int scanf (count char *format,....);
format 是一个字符,“...."是可变参数;
%d 一个十进制数
%f 一个浮点型
%c 一个单一字符(在读取这三个类型时会忽略回车,空格)
①format的类型一定要与后面的数据类型互相对应:“%d%d%d”,&a,&b,&c;
②用scanf之前需要加一个宏 #define _CRT_SECURE_NO_WARNINGS(Windows系统)
③scanf是行缓冲,在缓冲区都是一个一个的字符,输入“\n"之后就会触发I/O操作。
注:缓冲区为空时将会阻塞
标准输入缓冲区在scanf匹配时只把相应类型匹配,而回车存在在缓冲区,所以接着读取时将不会阻塞,接着运行。
5.1 缓冲区证明
5.2 scanf输入两个整数
在scanf中输入一定要一一对应,除非在(整形,浮点型,字符型)这三种类型时,空格可有也可以没有,这正是缓冲区理论。
5.3 字符型和整形的转换
在0 ~ 127之内,通过%c 和 %d 可以互相转换
当你操作空间超出变量本身所占用空间大小时,会崩溃
六 内存地址原理解析
以x86系统为例,用的32位系统,内存中以八位的十六进制编制,存储相应数据(四个字节)
CPU链接地址总线(32位),通过32根线的高低电平对应内存中的编制,告知内存我需要这个地址的数据,内存通过数据总线来传输给CPU寄存器。
七、scanf的循环读取
stdin是标准输入
【注】scanf()的函数返回值是成功读取变量的数量,发生错误时返回EOF;
出错情况:啥都别输入,输出Ctrl z。回车;连续三次。
7.1EOF:
(直接在代码中输入EOF,按住Ctrl,鼠标左键点击)
#define EOF ( - 1)
7.2 疯狂打印的情况
若是输入错误 运用缓冲区理论,例如scanf("%d",&d);
先输入了10,读取之后又输入了a,因为缓冲区里面是要读取整形,而进入缓冲区之后读取不到,不满足终止条件(EOF是 - 1),所以在while中疯狂打印,需要清空缓冲区借助 rewind(stdin)
八 scanf的混合输入
【注】scanf的返回值是读取成功的数量,可以用于单步调试
每次在混合输入的%c之前输入一个空格