一、使用數據類型的雷區 不要賦值給不相關的變數 例如:int a = 2.36這條語句,會直接給a賦值2,而不會進行四捨五入,原理是直接截斷小數點後面的數字。 例如:float b = 3.1415926536,C中保證了float類型的前6位精度,會損失精度,應該使用double來進行賦值。 許多 ...
一、使用數據類型的雷區
- 不要賦值給不相關的變數
- 例如:
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", n, m); printf("%d %d %d\n", n); printf("%d %d\n", f, g); return 0; }
運行結果:
- 如上運行結果,第一個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("$___________\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; }
運行結果:
- \a表示一聲電腦警報
- 第二條列印語句,就是讓游標向前移動8個下劃線(因為有8個\b),然後在這裡鍵入數字即可;
- 第三條語句,先換行,再來一個tab製表符,然後列印那句話;
- 第四條語句,\r代表先回到這一行的首部,然後列印Gee!最後游標落在下一行
三、屬性輸出
1.printf
什麼時候把輸出發送到屏幕呢?
- 最初,先發送到緩衝區(buffer)的中間存儲區域,然後緩衝區的內容在不斷的被髮送到屏幕上。
- 什麼時候發送到屏幕呢?C語言規定:當緩衝區滿、遇到換行符或者需要輸入的時候
從緩衝區把數據發送到屏幕或者文件被稱為刷新緩衝區。
- 舊式編譯器遇到
scanf
函數也不會刷新緩衝區 - 所以有時經常寫
\n
也是一種習慣。
小結:
(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大數據學習視頻禮包