C連載14-精準數據類型、參數數量類型匹配、緩衝區的原理

1、使用數據類型的雷區

  • 不要賦值給不相關的變量
  • 例如:int a = 2.36這條語句,會直接給a賦值2,而不會進行四捨五入,原理是直接截斷小數點後面的數字。
  • 例如:float b = 3.1415926536,C中保證了float類型的前6位精度,會損失精度,應該使用double來進行賦值。
  • 許多公司內部會在變量名中體現變量類型,例如:int類型的通常用i_當前綴,unsigned short會使用us_當前綴。

2、參數與陷阱

  • 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", n, m);
 printf("%d %d %d\n", n);
 printf("%d %d\n", f, g);

 return 0;
}

運行結果: 14.1git

  • 如上運行結果,第一個printf只打印出來一個參數,後面的參數沒有打印出來;第二個printf第一個顯示對了,可是後面兩個由於沒有給出參數的取值,所以計算機就隨機的嫺熟出來數據;第三個printf由於類型匹配不上,所以也是隨即打印了兩個數字。float類型不會自動轉化爲int類型。

3、轉義序列示例

#include<stdio.h>
#pragma warning(disable:4996)

int D14_2_escape(void) {
 float salary;
 printf("\aEnter your desired monthly salary:");
 printf("$___________\b\b\b\b\b\b\b\b");
 scanf("%f", &salary);
 printf("\n\t$%.2f a month is %0.2f a year", salary, salary * 12.0);
 printf("\rGee!\n");

 return 0;
}

運行結果: 14.2github

  • \a表示一聲計算機警報
  • 第二條打印語句,就是讓光標向前移動8個下劃線(由於有8個\b),而後在這裏鍵入數字便可;
  • 第三條語句,先換行,再來一個tab製表符,而後打印那句話;
  • 第四條語句,\r表明先回到這一行的首部,而後打印Gee!最後光標落在下一行

3、屬性輸出

1.printf何時把輸出發送到屏幕呢?

  • 最初,先發送到緩衝區(buffer)的中間存儲區域,而後緩衝區的內容在不斷的被髮送到屏幕上。
  • 何時發送到屏幕呢?C語言規定:當緩衝區滿、遇到換行符或者須要輸入的時候

從緩衝區把數據發送到屏幕或者文件被稱爲刷新緩衝區。微信

  • 舊式編譯器遇到scanf函數也不會刷新緩衝區
  • 因此有時常常寫\n也是一種習慣。

小結:
(1)C語言支持混合數據類型表達式,可是會進行自動類型轉換。
(2)_Bool是一種無符號類型;編輯器

3、源碼:

    • 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
相關文章
相關標籤/搜索