二十
一、列舉型別
1、列舉型別是一種基本型別,不是構造型別,被說明為列舉型別的變數只能取列舉列表中的值。
2、定義列舉型別:enum 列舉型別名;
定義列舉型別變數:enum 列舉型別名 變數名;
3、列舉變數也可以同時定義:enum 列舉型別名 變數名;初始化必須是列舉值;
4、列舉變數的預設值類似陣列下標,手動賦值其後的值依次加一;
5、typedef關鍵字:自定義型別說明符,typedef 原型別名 新名;
6、預處理指令:以#開頭的指令,是在編譯之前做的工作,寫在函式前;
7、巨集的概念:被定義為『巨集』的特殊識別符號為『巨集名』,預處理時對巨集名進行巨集代換;
1)無參巨集定義:#define 巨集名 字串(字串可以使常數、表示式、格式串);
2)巨集的作用域:字串中出現的巨集名不替換,#undef 巨集名 取消巨集定義,巨集定義允許巢狀;
3)巨集也可以定義新的型別名,定義輸出格式等;
4)有殘巨集定義:#define 巨集名(形參表列) 字串;形參間可以有空格,巨集名和形參之間不能有空格;
5)有參巨集求最大值:#define max(a,b) a>b?a:b
8、條件編譯
1)#if-#elif-#else-#endif條件編譯:預處理階段根據條件不同編譯不同**段,生成不同大小的檔案,且條件判斷的是巨集定義的值;
2)#ifdef
-#else-#endif條件編譯:
檢測巨集定義,是即執行語句;
#ifndef-#else-#endif條件編譯:
檢測巨集定義,否執行語句;
3)條件編譯實現除錯bug
二十二、檔案
1、static和extern修飾變數和函式
1) 修飾區域性變數:
static修飾定義的區域性變數是靜態變數作用域延長不會釋放,定義語句執行一次;extern不能修飾定義區域性變數;
2) 修飾全域性變數:
static修飾定義的全域性變數
只能在定義檔案中使用,不同檔案可以定義同名變數
;extern修飾定義全域性變數
只要宣告包含的檔案都可以使用,但不能定義同名變數,全域性變數預設都是extern預設初始值是0,宣告可以省略
extern;3)
修飾函式:
static修飾定義的函式
只能在定義檔案中使用
;extern修飾定義函式
只要宣告包含的檔案都可以使用,
預設都是extern可以省略。
2、檔案 :儲存在外部介質上的資料的集合,集合名叫檔名,作業系統以檔案為單位進行資料管理。
1)檔案分類
a、從使用者角度分為拍普通檔案和裝置檔案
b、從檔案編譯方式分為ascii碼檔案和二進位製碼檔案(流式檔案)
2) 檔案操作步驟:引入標頭檔案(stdio.h)->定義檔案指標
->
開啟檔案->
檔案讀寫->
關閉檔案;
3)檔案操作原理:檔案資料輸入時先在記憶體區開闢檔案緩衝區以流傳輸資料到資料區;輸出資料時相反。
3、c語言檔案指標:指向檔案的指標(結構型別指標),存的是檔案首位址;
1)定義形式:file *指標變數識別符號;
2)檔案開啟:檔案指標名 = fopen(檔名,使用檔案方式);,檔名是字串常量或字串陣列;檔案在products/debug
3)檔案關閉:fclose(檔案指標);,與開啟對應不關閉可能造成寫入失敗;
4) 檔案使用方式和注意事項
a、 文字檔案讀寫要先轉碼,速度比二進位製碼檔案慢;
b、標準檔案由系統開啟可直接使用;
c、開啟檔案出錯返回空指標值null ,常用開啟檔案程式段:
#include
int main ()else
fclose(fp);
return 0;
} 4、檔案讀寫函式 fgetc和fputc:以字元(位元組)為單位的讀寫函式,每次可從檔案讀出或向檔案寫入乙個字元;
1)fputc字元寫入函式 :呼叫形式-fputc(字元量,檔案指標);,字元量可以是字元常量或變數
(fopen以w
和w+開啟檔案);
2)fgetc字元讀取韓式:呼叫形式-fgetc(檔案指標);,
fopen以r
和+開啟檔案,連續讀取檔案內部指標預設加一,可以用預設結束標誌eof(巨集定義-1)來判斷;
練習:儲存鍵盤輸入字串並讀取
#include
int main(int argc, const char * argv)
printf("本次共寫入了%d個字元\n",count);
rewind(fp);//檔案指標重新指向首位址
count = 0;
//從讀取乙個字元
ch = fgetc(fp);
while (ch != eof)
printf("\n本次共讀取了%d個字元\n",count);
}//關閉檔案指標
fclose(fp);
return 0;
}5、字串的檔案讀寫函式:fgets和fputs
1)寫入函式:fputs(str,fp);,函式返回值為字元個數;
2)讀取函式:fgets(str,sizeof(str),fp);,遇到\n和eof讀取結束並自動加\0;
6、資料塊讀寫函式:fread和fwrite
1)讀資料函式:fread(buffer,size,count,fp);
2)寫資料函式:fwrite
(buffer,size,count,fp
);練習:檔案的結構體讀寫
#include
struct student;
int main(int argc, const char * argv), , };
//開啟檔案
file *fp = fopen("student.data", "wb+");
//判斷檔案是否開啟成功
if (fp != null)
printf("寫入成功!\n");
rewind(fp);//檔案指標重新指向首位址
struct student stu2[3];
for (int i = 0; i < 3; i++)
} //關閉檔案指標
fclose(fp);
getchar();
return 0; }
7、格式讀寫函式:fprintf和fscanf
1) fprintf(檔案指標,格式字串,寫入表列);
2) fscanf
(檔案指標,
格式字串,寫入表列
);練習:讀取和寫入二維陣列
#include
int main(int argc, const char * argv);
//開啟檔案
file *fp = fopen("arr.txt", "w+");
//判斷檔案是否開啟成功
if (fp != null)
printf("寫入成功!\n");
rewind(fp);//檔案指標重新指向首位址
int arr[3][2];
for (int i = 0; i < 3; i++)
for (int i = 0; i < 3; i++)
printf("\n"); }
}//關閉檔案指標
fclose(fp);
return 0; }
8、檔案的隨機讀寫實現檔案定位:檔案內部指標移動函式
1)rewind(檔案指標);
2)fseek(檔案指標,位移量,起始點) ;
3)檔案檢測函式 feof(檔案指標);判斷檔案是否結束,返回值1為是0為否,總是會多執行一次不如eof;
4)檔案檢測函式
ferror(檔案指標
);檢查檔案讀寫時是否出錯,
返回值0為否其他為是;
5)檔案錯誤標誌和檔案結束標誌置0函式clearerror(檔案指標);
自學筆記 C語言複習2023年7月6日
十 八 字元陣列 1 位於雙引號中的字串行 記憶體中以 0結束,多出乙個位元組 2 c語言中沒有字串變數,用字元陣列來存放字串 3 字元陣列 char 陣列名 常量表示式1 長量表示式2 1 字元陣列儲存字串可以省略大括號 2 字元陣列長度必須大於等於字串長度 1 3 字元陣列的輸出 字串用 s格式...
自學筆記 C語言複習2023年6月27日
十 一 迴圈結構 1 在給定條件成立時,反覆執行某程式段直到條件不成立為止。給定的條件稱為迴圈條件,反覆執行的程式段稱為迴圈體。2 迴圈語句包括 1 用goto語句和if語句 基本不用 2 用while語句 3 用do while語句 4 用for語句。3 構成迴圈的條件 1 迴圈的控制條件 2 迴...
C語言複習筆記 7
所謂除錯 debug 就是讓 一步一步慢慢執行,跟蹤程式的執行過程。比如,可以讓程式停在某個地方,檢視當前所有變數的值,或者記憶體中的資料 也可以讓程式一次只執行一條或者幾條語句,看看程式到底執行了哪些 在除錯的過程中,我們可以監控程式的每乙個細節,包括變數的值 函式的呼叫過程 記憶體中資料 執行緒...