408考研(C语言基础) 混合运算-scanf读取标准输入原理总结

【注】:C语言注重计算机原理解析,多写程序

目的:字符串常量的混合运算与scanf熟练使用

一、环境使用

1、vs中每个项目编译后都是一个exe可执行程序(Windows程序),每次只能启动一个,要设置为启动项目(粗体)

2、在源文件处新建代码

3、单步调试

快捷键F11,可以逐步运行,也可以在断点调试下接单步。

F10是逐过程调试,不进入函数模块

调试的意义在于检查每一步是否按照预期来进行运行

二、大小写转换

 408考研(C语言基础) 混合运算-scanf读取标准输入原理总结_第1张图片

三、字符串常量

C语言通过字符数组来存储字符串,没有String类型

用“ ”引起来,‘’是字符型常量

“CHINA"在内存中的存储占据的是6个内存单元,最后一个字符为’\0‘,只是在输出时不显示。

将它赋值给字符数组时要注意是6个内存单元

四、混合运算

4.1 类型强制转换

408考研(C语言基础) 混合运算-scanf读取标准输入原理总结_第2张图片

4.1.1 未进行强制类型

在C语言中,除号“/”的数据类型是由除数和被除数决定的。

408考研(C语言基础) 混合运算-scanf读取标准输入原理总结_第3张图片

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匹配时只把相应类型匹配,而回车存在在缓冲区,所以接着读取时将不会阻塞,接着运行。

408考研(C语言基础) 混合运算-scanf读取标准输入原理总结_第4张图片

5.1 缓冲区证明

5.2 scanf输入两个整数

在scanf中输入一定要一一对应,除非在(整形,浮点型,字符型)这三种类型时,空格可有也可以没有,这正是缓冲区理论。

408考研(C语言基础) 混合运算-scanf读取标准输入原理总结_第5张图片

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)

408考研(C语言基础) 混合运算-scanf读取标准输入原理总结_第6张图片

 

八 scanf的混合输入

【注】scanf的返回值是读取成功的数量,可以用于单步调试

每次在混合输入的%c之前输入一个空格

408考研(C语言基础) 混合运算-scanf读取标准输入原理总结_第7张图片

 

你可能感兴趣的:(windows)