zoukankan      html  css  js  c++  java
  • C连载14-精准数据类型、参数数量类型匹配、缓冲区的原理

    一、使用数据类型的雷区

    • 不要赋值给不相关的变量
    • 例如:int a = 2.36这条语句,会直接给a赋值2,而不会进行四舍五入,原理是直接截断小数点后面的数字。
    • 例如:float b = 3.1415926536,C中保证了float类型的前6位精度,会损失精度,应该使用double来进行赋值。
    • 许多公司内部会在变量名中体现变量类型,例如:int类型的一般用i_当前缀,unsigned short会使用us_当前缀。

    二、参数与陷阱

    • C语言会通过函数原型机制检查函数调用时参数的个数和类型是否正确,但是printf()scan()不起作用,因为这两个函数的参数是可变的。
    #include<stdio.h>
    int D14_1_badcount(void) {
     int n = 4;
     int m = 5;
     float f = 7.0f;
     float g = 8.0f;
    
     printf("%d
    ", n, m);
     printf("%d %d %d
    ", n);
     printf("%d %d
    ", f, g);
    
     return 0;
    }

    运行结果: 14.1

    • 如上运行结果,第一个printf只打印出来一个参数,后面的参数没有打印出来;第二个printf第一个显示对了,但是后面两个因为没有给出参数的取值,因此计算机就随机的娴熟出来数据;第三个printf因为类型匹配不上,因此也是随即打印了两个数字。float类型不会自动转化为int类型。

    三、转义序列示例

    #include<stdio.h>
    #pragma warning(disable:4996)
    
    int D14_2_escape(void) {
     float salary;
     printf("aEnter your desired monthly salary:");
     printf("$___________");
     scanf("%f", &salary);
     printf("
    	$%.2f a month is %0.2f a year", salary, salary * 12.0);
     printf("
    Gee!
    ");
    
     return 0;
    }

    运行结果: 14.2

    • a表示一声计算机警报
    • 第二条打印语句,就是让光标向前移动8个下划线(因为有8个),然后在这里键入数字即可;
    • 第三条语句,先换行,再来一个tab制表符,然后打印那句话;
    • 第四条语句, 代表先回到这一行的首部,然后打印Gee!最后光标落在下一行

    三、属性输出

    1.printf什么时候把输出发送到屏幕呢?

    • 最初,先发送到缓冲区(buffer)的中间存储区域,然后缓冲区的内容在不断的被发送到屏幕上。
    • 什么时候发送到屏幕呢?C语言规定:当缓冲区满、遇到换行符或者需要输入的时候

    从缓冲区把数据发送到屏幕或者文件被称为刷新缓冲区。

    • 旧式编译器遇到scanf函数也不会刷新缓冲区
    • 所以有时经常写 也是一种习惯。

    小结:
    (1)C语言支持混合数据类型表达式,但是会进行自动类型转换。
    (2)_Bool是一种无符号类型;

    三、源码:

      • D14_1_badcount.c
      • D14_2_escape.c
      • https://github.com/ruigege66/CPrimerPlus/blob/master/D14_1_badcount.c
      • https://github.com/ruigege66/CPrimerPlus/blob/master/D14_2_escape.c
      • CSDN:https://blog.csdn.net/weixin_44630050
      • 博客园:https://www.cnblogs.com/ruigege0000/
      • 欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流,后台回复“礼包”获取Java大数据学习视频礼包
        20.4
  • 相关阅读:
    打开 ASP.NET 配置设置窗体
    WCF中Service Configuration Editor的使用方法
    使用Process类调用EXE程序出错的问题
    C#子窗口关闭父窗口
    WCF客户端代理文件创建和使用中的问题
    JS 中的文件操作
    WCF在 IIS上面 部署的步骤
    asp.net中怎么将json格局的数据添加下拉菜单
    计算两个日期相差的天数
    SQL语句解释大全
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/13286300.html
Copyright © 2011-2022 走看看