c语言编译器怎么用scanfkl,C语言一些笔记
常用頭文件
math.h
常用函數
abs();// 求絕對值 返回值int
sqrt();// 求平方根 返回值double
sin()
stdio.h
printf();
scanf();
getc();
string.h
strlen();
strcpy();
strcmp();
無符號類型
unsigned
浮點數問題
浮點數無法精確存儲的原因
一個單精度的變量只能保證有效數位是7位。7位后面的數字是無意義的,并不準確表示該數
在C語言中盡量避免將一個很大的數和很小的數直接相加或相減,否則會丟失小數
輸出控制符
\t:制表符,輸出8個空格
\r:跳到一行初始位置
char類型的八進制
char c = '\729'; // 錯誤的代碼,以\開頭的是八進制,而八進制不能有9
%m.n問題
scanf()的問題
scanf("%2d %*3d %d", &a, &b);
如果輸入以下信息:
12 345 67
系統會將12賦給a,在%*3d表示讀入3位整數,但不賦值給任何變量,所以跳過345,將67給b
switch
switch與case常量表達式只能是整數類型、字符型;
case只能是常量表達式
二維數組
int a[3][4] = {0}; // 數組的初始化,每個元素都為0
int a[][4] = {1, 2, 3, ...}; // 合法的,可以這么玩
字符數組
可以理解為字符串,C語言中沒有字符串類型,但是可以是字符數組來模擬。
因此,每個字符數組的最后一位是\0
字符串的初始化
char ch[10] = {"xxx"};
char ch[] = "xxx"; // 和上面一樣都是等價的
// 只不過這樣的話,系統會自動在最后面加\0
字符數組與printf應用
char * p = "%d %d";
int a = 10, b = 20;
printf(p, a, b);
字符處理函數
puts(str); // 將一個以'\0'結束的字符串輸出的終端
gets(str); // 從終端輸入字符串到str并返回str首地址
strcat(str1, str2); // 把str2中字符串追加到str1后面,并刪除str1后的'\0'字符,并返回str1的首地址
strcpy(str1, str2); // 將str2中字符拷貝的str1中,最后的'\0'也會拷貝。前提是str1必須可以裝下str2
strcpy(str1, str2, size); // 將str2裝入str1中,指定復制的長度size
strcmp(str1, str2); // 按ASCII碼從左到右逐個比較字符串內容,直到出現'\0',然后返回結構
str1 == str2 返回值==0
str1 > str2 返回值>0
str1 < str2 返回值<0
strlen(str); //返回str的長度,不包括字符串結束符'\0'
strlwr(str); // 將字符串中大寫字母轉換為小寫字母
strupr(str); // 將字符串中小寫字符轉換為大寫字母
變量修飾符
auto : 定義變量默認就是這個
static : 定義靜態變量
register: 使用該關鍵字,變量會存放在寄存器里,有效提高運算速度
extern : 外部變量,放在靜態存儲區,意思就是說別的.c文件可以使用 默認函數就是該類型
宏定義
無參
#define 宏名 字符串(常數,表達式)
在使用的時候,當編譯器掃描到宏時,會直接替換
有參數
#define 宏名(參數表) 字符串
#define ADD(X, Y) (X+Y)
使用
int sum = ADD(5, 10); 展開后 int sum = (5, 10); // 注意替換的時候會有括號的,因為在定義時候就有括號
頭文件
<>:到存放C庫函數的頭文件所在目錄
"":現在當前目錄找,找不到時,回去C庫函數所在目錄找
條件編譯
滿足條件編譯,不滿足不編譯;條件編譯作用:直接在語法檢查的時候判斷是否編譯
使用格式一
#ifdef 標識符
程序段1
#endif
格式二:
#ifdef 標識符
程序段1
#else
程序段2
#end
格式三:
#if 常量表達式
程序段1
#else
程序段2
#endif
函數指針
格式:
類型說明符 (* 指針名)();
類型說明符:函數返回類型
() 表示是一個函數指針
指針數組
int * a[5]; 存放地址的數組
數組指針
指向數組的指針
int (*pl)[5];
數組關于數組名和&數組名
&a+1:是加整個數組的大小
&a[0] + 1:是一個元素的大小
逗號表達式
int a = (2, 3, 4);
// 先計算左邊的操作數,再計算右邊的操作數
// 右邊的操作數的類型的值作為整個表達式的結果
scanf()問題
如果在scanf()中有非輸入控制符,要原樣輸入
如:
scanf("m%d", &a); // 要想使用先輸入m,再輸入要給a的值
三目運算符
格式:A?B:C
等價于
if(A)
B;
else
C;
數據類型
int 、long int、 short int、 char 、 float、double
位運算
運算符
操作
優先級
~
按位取反
1
<<
左移
2
>>
右移
2
&
按位與
3
^
按位異或
4
|
按位或
5
注意事項:
~的運算操作數是1個,其余都是兩個
可以與賦值結合
<<=、>>=、&=、^=、|=
異或運算,相同為1,不同為0
<
操作數直接左移,高位丟掉,低位補0
>>右移
如果無符號右移,空位直接補0
如果是有符號右移,
如果是正數,右移補0
如果是負數,
左邊補1,稱為算數右移【實際上是使用這個】
左邊補0,稱為邏輯右移
動態內存
malloc(size); // 在內存申請開辟長度為size的連續空間
calloc(n, size); // 在內存范圍n個長度為size的連續空間,函數返回初始地址,若分配失敗則返回NULL
free(p); 釋放p指向的內存
共用體
union 共用體名
{
數據類型1 成員1;
數組類型2 成員2;
...
}
為共用體變量分為空間大小是以所有成員中占用空間字節數最大的成員為標準
如:
union Myunion
{
int age;
char names[20];
}
sizeof(union Myunion) == 20
共用體的初始化
只能對第一個成員初始化
共用體在使用的時候,會只保留最后一次對成員賦值的值
與結構體不同的是
只按空間最大的成員來分配空間
在同一時刻,只存放一個成員的值
枚舉
enum 枚舉名
{
枚舉元素
...
}
typedef
typedef 起別名
typedef int Num[100];
Num a; // 那么a就是一個數組,且元素有100個
文件
輸入:數據從文件到內存
輸出:數據從內存到文件
文件分類
按存儲介質分
普通文件
設備文件:鍵盤、鼠標
按數據組織分
文本文件:ASCII碼文件
二進制文件
C語言中文件的操作類型FILE是C為我們定義好的文件結構體
FILE * fp1, *fp2, *fp3;
文件常用函數
fopen(); 打開文件
fclose(); 關閉文件
系統自動打開和關閉的三個標準文件
標注輸入 --- 鍵盤 stdin
標準輸出 --- 顯示器 stdout
標出錯輸出 --- 顯示器 stdern
fopen作用
建立文件信息區
建立文件緩沖區
FILE * fopen(char * name, char * mode);
name: 文件路徑
mode: 打開文件方式
返回值:如果正常打開文件會返回文件結構體地址,反之返回NULL
文件的打開方式
r
打開文件必須存在,且每次都會覆蓋 讀
w
沒有文件立刻建立;有文件覆蓋該文件 寫
rb
二進制
wb
二進制
a
向文件末尾添加新的數據,且文件必須存在
ab
二進制
r+
既讀既寫,文件必須存在
w+
新建一個文件,既讀既寫
a+
源文件不刪除,末尾添加數據,既讀既寫
rb+
ab+
wb+
文本文件:回車 轉換為 換行符
二進制文件:不會轉換
讀寫函數-字符
讀取字符
fgetc(fp):從fp指向文件讀入一個字符并返回,讀成功返回。讀失敗返回EOF既-1
fputc(ch, fp):把字符ch寫到文件指針變量,所指向的文件中
寫成功:返回輸出字符
寫失敗:返回EOF既-1
feof():對于二進制文件讀取時判斷文件是否結束,返回值文件結束為1,否則為0
讀取字符串
fgets(str, n, fp):從fp文件讀入長度為(n-1)的字符串,存入str數組中
返回值:
成功返回str首地址
失敗返回NULL
讀完n-1之前遇到\n或EOF字符,讀入既結束,但也將\n按字符讀入
fputs(str, fp):str所指向的字符數組寫入文件中
返回值:
成功返回0
失敗返回非零
讀寫函數-二進制
fread(buffer, size, count, fp)
fwrite(buffer, size, count, fp)
buffer:要讀/寫首地址
szie:要讀/寫文件大小(長度)
count:要讀/寫數據塊的個數
fp:文件指針
隨機讀寫
rewind(fp):讓文件指針重新指向文件開頭
fseek(fp, 位偏移, 起始點):
起始點:0:文件開始位置;1:當前位置;2:文件末尾
位偏移:long類型加L
fseek(fp, 100L, 0); // 文件開始偏移100個字節
fseek(fp, -10L, 2); // 文件末尾往前偏移10個字節
ftell():獲取文件標記當前指向的位置
ferror(fp):文件讀寫的出錯檢測,0是沒有出錯,非0是出錯;每次讀寫時都會有新的ferror()函數
clearerr():使文件錯誤標志和文件結束標志為0
二進制讀寫2個字節
putw
getw
ASCII碼表
優先級表
總結
以上是生活随笔為你收集整理的c语言编译器怎么用scanfkl,C语言一些笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 地址+1,C语言中,为什么指针表
- 下一篇: c语言 typeof 结构体,Go语言通