混合运算-scanf读取标准输入原理
1.混合运算
强制类型转换实际上是运算符的一种,例如将整型变量i转换为浮点型的表达式:(float) i
。
这种运算的作用是当我们在进行除法运算时,如下所示:
int i = 5; float j = i / 2; //j的值是5 float k = (float)i / 2; //k的值是2.5,原因是表达式``(float)i``把整型5转换为5.0,做浮点数除法
2.scanf函数的原理
- 在标准输入缓冲区中,用户输入的数字、字符等,都以一个个字符形式存在缓冲区中,例如
10
是以1、0两个字符的形式,scanf函数就是用于读取这两个字符并转化为数字10。
行缓冲:在这种情况下。当在输入和输出中遇到换行符时,将执行真正的I/O操作。这时,我们输入的字符先存放到缓冲区中,等按下回车键换行时才进行实际的I/O操作,典型代表是标准输入缓冲区(stdin)和标准输出缓冲区(stdout)。 - scanf函数在读取整型数、浮点数、字符串时会忽略'\n'(回车符)、空格符等字符,忽略是指scanf函数执行时会首先删除这些字符,然后再阻塞。
- scanf函数在执行
scanf("%c",&c)
语句时,不会忽略任何字符。 - 注意,scanf在行缓冲区中读取整型(举个例子)值之后,'\n'还是留在行缓冲区中的,所以这个时候如果下一个是执行
scanf("%c",&c)
或者char arr[20]; gets(arr);
那么不会被卡住,读到换行符直接往下执行了,造成程序不符合预期。
3.ASCII码表
实际上转义字符\0
在ASCII码表中对应的是0,也就是说在计算机中,它用二进制表示数字0的方式来存储。而\n
在ASCII码表中对应的是数字10,所以这些转义字符也是字符常量,不会被scanf执行%c时忽略。
4.printf函数原理及格式控制
printf函数输出到屏幕上的东西实际上是一串字符串,例如printf("name=%s,age=%d\n,sex=%c,score=%f","Bob",24,m,98.5);
不管原来是字符还是数字输出到屏幕上都其实是一个个字符,所以OJ判题时要注意格式控制,如保留几位小数,占几位字符,左对齐还是右对齐等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具