單個字元 %c
字串 %s
ascii表對應的值
ascii表原圖
常用的對應關係:a-z~65-90
a-z~97-122
0-9~48-57
因此,字元和整數沒有本質的區別。
char變數在記憶體中儲存的是字元對應的ascii值。
#include
intmain()
強制型別轉換
自動型別轉換
無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變數的資料長度進行的臨時性轉換,而不改變資料說明時對該變數定義的型別
#include
intmain()
浮點型轉換成整型是將小數部分直接丟掉,而不是按照四捨五入向前捨入
只能使用八進位制或十六進製制,不能使用十進位制printf:
輸出控制符」和「輸出引數」無論在「順序上」還是在「個數上」一定要一一對應。c語言輸出控制符輸出控制符:
#include
intmain()
%x、%x、%#x、%#x 的辨析:小寫 大寫 帶0x指示16進製制 帶0x指示16進製制
推薦%#x
c語言大量用到的簡寫: 在 c 語言中,表示式 a=a#b 可以簡寫為 a#=b,#表示 +、-、*、/、% 中 的任何一種運算子。注意:a#=b 僅是一種簡寫,不會影響效率(大家都這樣寫)
a1=++a;會先進行自增操作,再進行賦值操作;而 b1=b++;會 先進行賦值操作,再進行自增操作。c1=- -c;和 d1=d- -;也是如此。優先順序:多個運算子出現在同乙個表示式中,各個運算子的執行順序
c語言表示式:
c語言語句:
雙目運算子、三目運算子、單目運算子
c語言運算子優先順序和結和性彙總表:
c語言運算子優先順序和結合性
格式化輸出
#include
intmain()
printf()格式控制符的完整形式:
%[flag][width][.precision]type
.precision 表示輸出精度,也就是小數的位數。flag的使用: 當小數部分的位數大於 precision 時,會按照四捨五入的原則丟掉多餘的數字;
當小數部分的位數小於 precision 時,會在後面補 0。
另外,.precision 也可以用於整數和字串,但是功能卻是相反的:
用於整數時,.precision 表示最小輸出寬度。與 width 不同的是,整數的寬度不足時會在左邊補 0, 而不是補空格。 用於整數時,起作用是在不足長度時左邊補0,長度充足是原樣輸出
用於字串時,.precision 表示最大輸出寬度,或者說擷取字串。當字串的長度大於 precision 時,會截掉多餘的字元;當字串的長度小於 precision 時,.precision 就不再起作用
#include
intmain()
printf隨處可見,我們要把他利用好
程式設計師思維、邏輯思維、未來思維
printf與scanf_s
puts與gets
對於scanf(),輸入資料的格式要和控制字串的格式保持一致。
取位址,取的是什麼?
本質上講,我們從鍵盤輸入的資料並沒有直接交給scanf(),而是放入了緩衝區,我們按下enter鍵,scanf()函式才會從緩衝區讀取資料,如果緩衝區的資料符合scanf()的要求,那麼就會讀取結束,否則繼續等待使用者輸入。
下例說明 scanf() 不會跳過不符合要求的資料,遇到不符合要求的資料會讀取失敗,而不是再繼續等待使用者 輸入。 總而言之,正是由於緩衝區的存在,才使得我們能夠多輸入一些資料,或者一次性輸入所有資料,這可以 認為是緩衝區的一點優勢。
#include
intmain()
利用scanf()輸出單個字元、字串、整數、小數:
下面**的除錯存在問題?
可能是因為vs2017的問題,對老的**不相容???
#include
intmain()
scanf()格式控制符彙總:
printf與scanf要對比學習和應用,學習的最終目的不是考高分,而是能夠真正解決實踐中遇到的問題。
使用多個scanf連續讀取資料時,我了避免緩衝區遺留資料的影響,我們應該使用scanf("%*[^\n]");scanf("%*c");清空緩衝區
將讀取到的字元直接丟棄,這就是在清空輸入緩衝區實際中應該限制讀取的資料長度,我們可以為字串分配有限的記憶體空間,當使用者輸入的字串過長就存放不了了,會沖刷掉其他資料,從而導致程式出錯或者崩潰。如果黑客發現了這個漏洞,就會構造棧溢位攻擊,改變程式的執行流程,甚至替換成自己的惡意**,對伺服器影響很大。
匹配特定的字元:%[0-9a-za-z]
不匹配特定的字元:%[^0-9]
丟棄讀取到的字元:%*[a-z]
scanf()如何指定字串的最大長度與字串擷取
scanf()如何讀取指定字元[0-9]
scanf()如何不讀取指定字元[^0-9\n]
scanf()如何讀取帶空格的字串[^\n]
scanf()不僅可以完全替代gets(),並且比gets()強大。scanf()小結:
scanf(type)
其中, 表示可有可無。各個部分的具體含義是:
type 表示讀取什麼型別的資料,例如 %d、%s、%[a-z]、%[^\n] 等;type 必須有。
width 表示最大讀取寬度,可有可無。
*表示丟棄讀取到的資料,可有可無。
Perl語言學習筆記 5 輸入與輸出
1 讀取標準輸入 chomp line 2 判斷是否讀到檔案末尾 defined line 3 讀取檔案內容 while foreach while與foreach的差別 while一次讀取一行,foreach一次讀取全部,然後對列表進行迴圈,最好用while 4 鑽石操作符 根據呼叫引數,從指定地...
C語言學習筆記 檔案輸入輸出
用於存放檔案資訊的結構體型別為 file 由系統定義 包含在內。檔案類別 1 程式檔案 內容為程式 2 資料檔案 內容為資料,供程式執行使用。二進位制檔案 資料以二進位制形式儲存 又稱映像檔案 執行更快 資料的儲存 1 字元一律以asc 的形式儲存 2 數值型兩種方式都可以 例如 表示10000 1...
C語言學習 輸入輸出與變數
輸入scanf 特殊字元變數 輸出輸入都必須使用佔位符 a,a 讀入乙個浮點值 僅c99有效 c 讀入乙個字元 d 讀入十進位制整數 i 讀入十進位制,八進位制,十六進製制整數 o 讀入八進位制整數 x,x 讀入十六進製制整數 s 讀入乙個字串,遇空格 製表符或換行符結束。f,f,e,e,g,g 用...