混合运算-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码表

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判题时要注意格式控制,如保留几位小数,占几位字符,左对齐还是右对齐等。

posted @   paopaotangzu  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示