C語言學習筆記之輸入與輸出

2021-10-13 12:58:44 字數 3279 閱讀 5396

單個字元 %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 表示輸出精度,也就是小數的位數。

 當小數部分的位數大於 precision 時,會按照四捨五入的原則丟掉多餘的數字;

 當小數部分的位數小於 precision 時,會在後面補 0。

另外,.precision 也可以用於整數和字串,但是功能卻是相反的:

 用於整數時,.precision 表示最小輸出寬度。與 width 不同的是,整數的寬度不足時會在左邊補 0, 而不是補空格。 用於整數時,起作用是在不足長度時左邊補0,長度充足是原樣輸出

 用於字串時,.precision 表示最大輸出寬度,或者說擷取字串。當字串的長度大於 precision 時,會截掉多餘的字元;當字串的長度小於 precision 時,.precision 就不再起作用

flag的使用:

#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 用...