提供基本語法和方法的 C 快速參(can)考備忘(wang)單。
#include <stdio.h>
int main() {
printf("Hello World!");
return 0;
}
使用 gcc
編譯 hello.c
文件
$ gcc -o hello hello.c
運行編譯后的二進制文件(hello
)
$ ./hello
# 輸出 => Hello World
int myNum = 15;
int myNum2; // 不賦(fu)(fu)值(zhi),然后再賦(fu)(fu)值(zhi)
myNum2 = 15;
int myNum3 = 15; // myNum3 值為 15
myNum3 = 10; // 現在 myNum3 值(zhi)為(wei) 10
float myFloatNum = 5.99; // 浮(fu)點數
char myLetter = 'D'; // 字(zi)符
int x = 5;
int y = 6;
int sum = x + y; // 添加變量相加
// 聲明多個變(bian)量
int x = 5, y = 6, z = 50;
const int minutesPerHour = 60;
const float PI = 3.14;
最佳實踐
const int BIRTHYEAR = 1980;
// 這(zhe)是(shi)一個注釋
printf("Hello World!"); // 這是一個注釋
/* 多行注(zhu)釋,上面(mian)的代碼(ma)將(jiang)打印出 Hello World!
到屏幕(mu)上,真(zhen)是太棒(bang)了 */
printf("I am learning C.");
int testInteger = 5;
printf("Number = %d", testInteger);
float f = 5.99; // 浮(fu)點數(shu)
printf("Value = %f", f);
short a = 0b1010110; // 2 進制數字
int b = 02713; // 8 進制數字
long c = 0X1DAB83; // 16 進制數字
// 以(yi) 8 進制形似(si)輸出
printf("a=%ho, b=%o, c=%lo\n", a, b, c);
// 輸(shu)出(chu) => a=126, b=2713, c=7325603
// 以 10 進(jin)制形式輸出
printf("a=%hd, b=%d, c=%ld\n", a, b, c);
// 輸出 => a=86, b=1483, c=1944451
// 以(yi) 16 進制形式輸(shu)出(字母(mu)小寫)
printf("a=%hx, b=%x, c=%lx\n", a, b, c);
// 輸出(chu) => a=56, b=5cb, c=1dab83
// 以 16 進制形式輸出(字母大寫(xie))
printf("a=%hX, b=%X, c=%lX\n", a, b, c);
// 輸出 => a=56, b=5CB, c=1DAB83
int a1=20, a2=345, a3=700;
int b1=56720, b2=9999, b3=20098;
int c1=233, c2=205, c3=1;
int d1=34, d2=0, d3=23;
printf("%-9d %-9d %-9d\n", a1, a2, a3);
printf("%-9d %-9d %-9d\n", b1, b2, b3);
printf("%-9d %-9d %-9d\n", c1, c2, c3);
printf("%-9d %-9d %-9d\n", d1, d2, d3);
輸出結果
20 345 700
56720 9999 20098
233 205 1
34 0 23
%-9d
中,d
表示以 10
進制輸出,9
表示最少占 9
個字符的寬度,寬度不足以空格補齊,-
表示左對齊
char greetings[] = "Hello World!";
printf("%s", greetings);
訪問字符串
char greetings[] = "Hello World!";
printf("%c", greetings[0]);
修改字符串
char greetings[] = "Hello World!";
greetings[0] = 'J';
printf("%s", greetings);
// 輸出 "Jello World!"
另一種(zhong)創(chuang)建字符串(chuan)的方(fang)法
char greetings[] = {'H','e','l','l','\0'};
printf("%s", greetings);
// 輸出 "Hell!"
C
沒有 String 類型,使用 char
類型并創建一個字符 array
int time = 20;
if (time < 18) {
printf("再會(hui)!");
} else {
printf("晚(wan)上好!");
}
// 輸出 -> "晚上好!"
int time = 22;
if (time < 10) {
printf("早上好!");
} else if (time < 20) {
printf("再會(hui)!");
} else {
printf("晚上好!");
}
// 輸出(chu) -> "晚上好!"
int time = 20;
(time < 18) ? printf("再會!") : printf("晚上好!");
int day = 4;
switch (day) {
case 3: printf("周三(san)"); break;
case 4: printf("周四"); break;
default:
printf("期待(dai)周末");
}
// 輸出 -> "周四" (day 4)
int i = 0;
while (i < 5) {
printf("%d\n", i);
i++;
}
注意:不要忘記(ji)增加條(tiao)件(jian)中使(shi)用(yong)的變量,否則循環(huan)永遠不會結束,成為“死循環(huan)”!
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 5);
int i;
for (i = 0; i < 5; i++) {
printf("%d\n", i);
}
int i;
for (i = 0; i < 10; i++) {
if (i == 4) {
break;
}
printf("%d\n", i);
}
在 i
等于 4
時跳出循環
int i;
for (i = 0; i < 10; i++) {
if (i == 4) {
continue;
}
printf("%d\n", i);
}
示例跳過 4
的值
int i = 0;
while (i < 10) {
if (i == 4) {
break;
}
printf("%d\n", i);
i++;
}
int i = 0;
while (i < 10) {
i++;
if (i == 4) {
continue;
}
printf("%d\n", i);
}
int myNumbers[] = {25, 50, 75, 100};
printf("%d", myNumbers[0]);
// 輸出 25
更改數組元素
int myNumbers[] = {25, 50, 75, 100};
myNumbers[0] = 33;
printf("%d", myNumbers[0]);
循環遍歷數組
int myNumbers[] = {25, 50, 75, 100};
int i;
for (i = 0; i < 4; i++) {
printf("%d\n", myNumbers[i]);
}
設置數組大小
// 聲明一個由四(si)個整數(shu)組成的數(shu)組:
int myNumbers[4];
// 添(tian)加(jia)元(yuan)素(su)
myNumbers[0] = 25;
myNumbers[1] = 50;
myNumbers[2] = 75;
myNumbers[3] = 100;
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
定義枚舉變量
enum week a, b, c;
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;
有了枚舉變量,就(jiu)可(ke)以把列表(biao)中(zhong)的值賦(fu)給它
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a = Mon, b = Wed, c = Sat;
// 或者
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;
enum week {Mon = 1, Tues, Wed, Thurs} day;
scanf("%d", &day);
switch(day){
case Mon: puts("Monday"); break;
case Tues: puts("Tuesday"); break;
case Wed: puts("Wednesday"); break;
case Thurs: puts("Thursday"); break;
default: puts("Error!");
}
// 創建一個整數變量來存儲我們從用戶那里(li)得到(dao)的數字
int myNum;
// 要求用戶(hu)輸入一(yi)個數字
printf("請輸(shu)入一個數字(zi): \n");
// 獲取(qu)并保(bao)存用戶(hu)輸入(ru)的號(hao)碼
scanf("%d", &myNum);
// 輸出用戶輸入的數字
printf("您輸入的數字: %d", myNum);
// 創(chuang)建一個字符串(chuan)
char firstName[30];
// 要(yao)求(qiu)用戶輸入一些文本
printf("輸入(ru)您的(de)名(ming)字(zi): \n");
// 獲(huo)取并保存文(wen)本
scanf("%s", firstName);
// 輸出文本
printf("Hello %s.", firstName);
創建變量(liang)時,會為該變量(liang)分配一個內(nei)存地(di)址
int myAge = 43;
printf("%p", &myAge);
// 輸(shu)出:0x7ffe5367e044
要訪問它,請使用引用運算符 (&
)
int myAge = 43; // 一(yi)個 int 變量
printf("%d", myAge); // 輸出 myAge(43)的(de)值
// 輸(shu)出 myAge 的內存(cun)地(di)址(0x7ffe5367e044)
printf("%p", &myAge);
int myAge = 43; // 一個 int 變量
int* ptr = &myAge; // 名為 ptr 的指針變量,用于存儲(chu) myAge 的地址
printf("%d\n", myAge); // 輸(shu)出 myAge (43) 的(de)值
printf("%p\n", \&myAge); // 輸出 myAge 的內存地址(0x7ffe5367e044)
printf("%p\n", ptr); // 用(yong)指針(0x7ffe5367e044)輸出myAge的(de)內存地址
int myAge = 43; // 變量聲明
int* ptr = &myAge; // 指針(zhen)聲明
// 參(can)考:用指針輸出 myAge 的(de)
// 內(nei)存地址(0x7ffe5367e044)
printf("%p\n", ptr);
// 取消引用:用指針輸出 myAge 的值 (43)
printf("%d\n", *ptr);
int myNum = 100 + 50;
int sum1 = 100 + 50; // 150 (100 + 50)
int sum2 = sum1 + 250; // 400 (150 + 250)
int sum3 = sum2 + sum2; // 800 (400 + 400)
Operator | Name | Description | Example |
---|---|---|---|
+ | 加 | 將兩個值相加 | x + y |
- | 減 | 從另一個值中減去一個值 | x - y |
* | 乘 | 將兩個值相乘 | x * y |
/ | 除 | 將一個值除以另一個 | x / y |
% | 取模 | 返回除法余數 | x % y |
++ | 增量 | 將變量的值增加 1 | ++ |
-- | 乘量 | 將變量的值減 1 | --x |
符號 | 示例 | 如同 |
---|---|---|
= | x = 5 | x = 5 |
+= | x += 3 | x = x + 3 |
-= | x -= 3 | x = x - 3 |
*= | x *= 3 | x = x * 3 |
/= | x /= 3 | x = x / 3 |
%= | x %= 3 | x = x % 3 |
&= | x &= 3 | x = x & 3 |
|= | x |= 3 | x = x | 3 |
^= | x ^= 3 | x = x ^ 3 |
>>= | x >>= 3 | x = x >> 3 |
<<= | x <<= 3 | x = x << 3 |
int x = 5;
int y = 3;
printf("%d", x > y);
// 返回(hui) 1(真),因為 5 大于 3
符號 | 名稱 | 示例 |
---|---|---|
== | 等于 | x == y |
!= | 不等于 | x != y |
> | 大于 | x > y |
< | 小于 | x < y |
>= | 大于或等于 | x >= y |
<= | 小于或等于 | x <= y |
比較運算(suan)符用于比較兩個值
符號 | 名稱 | 說明 | 示例 |
---|---|---|---|
&& | 與 邏輯 | 如果兩個語句都為真,則返回真 | x < 5 && x < 10 |
|| | 或 邏輯 | 如果其中一個語句為真,則返回真 | x < 5 || x < 4 |
! | 非 邏輯 | 反轉結果,如果結果為真則返回假 | !(x < 5 && x < 10) |
unsigned int a = 60; /* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
printf("Line 1 - c 的值是(shi) %d\n", c );
c = a | b; /* 61 = 0011 1101 */
printf("Line 2 - c 的值(zhi)是 %d\n", c );
c = a ^ b; /* 49 = 0011 0001 */
printf("Line 3 - c 的(de)值是 %d\n", c );
c = ~a; /*-61 = 1100 0011 */
printf("Line 4 - c 的值是 %d\n", c );
c = a << 2; /* 240 = 1111 0000 */
printf("Line 5 - c 的值是 %d\n", c );
c = a >> 2; /* 15 = 0000 1111 */
printf("Line 6 - c 的值是 %d\n", c );
運算符 | 描述 | 實例 |
---|---|---|
& | 按位與操作,按二進制位進行"與"運算 | (A & B) 將得到 12 即為 0000 1100 |
| | 按位或運算符,按二進制位進行"或"運算 | (A | B) 將得到 61 即為 0011 1101 |
^ | 異或運算符,按二進制位進行"異或"運算 | (A ^ B) 將得到 49 即為 0011 0001 |
~ | 取反運算符,按二進制位進行"取反"運算 | (~A) 將得到 -61 即為 1100 0011 |
<< | 二進制左移運算符 | A << 2 將得到 240 即為 1111 0000 |
>> | 二進制右移運算符 | A >> 2 將得到 15 即為 0000 1111 |
數據類型 | 大小 Size | 范圍 Range | 描述 Description |
---|---|---|---|
char | 1 字節 | ?128 ~ 127 | 單個字符/字母/數字/ASCII |
signed char | 1 字節 | ?128 ~ 127 | - |
unsigned char | 1 字節 | 0 ~ 255 | - |
int | 2 到 4 字節 | ?32,768 ~ 32,767 | 存儲整數 |
signed int | 2 字節 | ?32,768 ~ 32,767 | |
unsigned int | 2 字節 | 0 ~ 65,535 | |
short int | 2 字節 | ?32,768 ~ 32,767 | |
signed short int | 2 字節 | ?32,768 ~ 32,767 | |
unsigned short int | 2 字節 | 0 ~ 65,535 | |
long int | 4 字節 | -2,147,483,648 ~ 2,147,483,647 | |
signed long int | 4 字節 | -2,147,483,648 ~ 2,147,483,647 | |
unsigned long int | 4 字節 | 0 ~ 4,294,967,295 | |
float | 4 字節 | ||
double | 8 字節 | ||
long double | 10 字節 |
// 創建(jian)變(bian)量(liang)
int myNum = 5; // 整(zheng)數
float myFloatNum = 5.99; // 浮(fu)點數
char myLetter = 'D'; // 字(zi)符(fu)串
// 高精度浮點數據或數字
double myDouble = 3.2325467;
// 打印(yin)輸出變量(liang)
printf("%d\n", myNum);
printf("%f\n", myFloatNum);
printf("%c\n", myLetter);
printf("%lf\n", myDouble);
數據類型 | 說 明 |
---|---|
char | 字符型 |
short | 短整型 |
int | 整型 |
long | 長整型 |
float | 單精度浮點型 |
double | 雙精度浮點型 |
void | 無類型 |
格式說明符 | 數據類型 |
---|---|
%d 或 %i | int 整數 |
%f | float 單精度的十進制類型 |
%lf | double 高精度浮點數據或數字 |
%c | char 字符 |
%s | 用于 strings 字符串 |
short | int | long | |
---|---|---|---|
8 進制 | %ho | %o | %lo |
10 進制 | %hd | %d | %ld |
16 進制 | %hx / %hX | %x / %X | %lx / %lX |
int myNum = 5;
float myFloatNum = 5.99; // 浮點(dian)數
char myLetter = 'D'; // 字符串(chuan)
// 打(da)印(yin)輸出變(bian)量
printf("%d\n", myNum);
printf("%f\n", myFloatNum);
printf("%c\n", myLetter);
指令 | 描述 |
---|---|
#define | 定義宏 |
#include | 包含一個源代碼文件 |
#undef | 取消已定義的宏 |
#ifdef | 如果宏已經定義,則返回真 |
#ifndef | 如果宏沒有定義,則返回真 |
#if | 如果給定條件為真,則編譯下面代碼 |
#else | #if 的替代方案 |
#elif | 如果 #if 條件為假,當前條件為真 |
#endif | 結束一個 #if……#else 條件編譯塊 |
#error | 當遇到標準錯誤時,輸出錯誤消息 |
#pragma | 使用標準化方法,向編譯器發布特殊的命令到編譯器中 |
// 所(suo)有的(de) MAX_ARRAY_LENGTH 替換(huan)為 20
#define MAX_ARRAY_LENGTH 20
// 系統庫中獲取 stdio.h
#include <stdio.h>
// 本地目錄中獲(huo)取 myheader.h
#include "myheader.h"
#undef FILE_SIZE
#define FILE_SIZE 42 // 取(qu)消已定義并定義為 42
宏 | 描述 |
---|---|
__DATE__ | 當前日期,一個以 "MMM DD YYYY" 格式表示的字符常量 |
__TIME__ | 當前時間,一個以 "HH:MM:SS" 格式表示的字符常量 |
__FILE__ | 這會包含當前文件名,一個字符串常量 |
__LINE__ | 這會包含當前行號,一個十進制常量 |
__STDC__ | 當編譯器以 ANSI 標準編譯時,則定義為 1 |
ANSI C
定(ding)義(yi)了許多宏(hong)(hong),您可以(yi)使(shi)用這(zhe)些宏(hong)(hong),但(dan)是不能直接修(xiu)改這(zhe)些預定(ding)義(yi)的宏(hong)(hong)
#include <stdio.h>
int main() {
printf("File :%s\n", __FILE__);
printf("Date :%s\n", __DATE__);
printf("Time :%s\n", __TIME__);
printf("Line :%d\n", __LINE__);
printf("ANSI :%d\n", __STDC__);
}
一個宏通常寫在一個單行上。
#define message_for(a, b) \
printf(#a " 和 " #b ": 我們愛你!\n")
如果宏太長,一個單行容納不下,則使用宏延續運算符 \
#include <stdio.h>
#define message_for(a, b) \
printf(#a " 和(he) " #b ": 我們愛(ai)你!\n")
int main(void) {
message_for(Carole, Debra);
return 0;
}
當上(shang)面的代碼被(bei)編譯和(he)執行時,它會產生下(xia)列結(jie)果:
Carole 和 Debra: 我(wo)們愛你!
需要把一個宏的參數轉換為字符串常量時,使用字符串常量化運算符 #
#include <stdio.h>
#define tokenpaster(n) printf ("token" #n " = %d", token##n)
int main(void){
int token34 = 40;
tokenpaster(34);
return 0;
}
#include <stdio.h>
#if !defined (MESSAGE)
#define MESSAGE "You wish!"
#endif
int main(void) {
printf("Here is the message: %s\n", MESSAGE);
return 0;
}
int square(int x) {
return x * x;
}
宏重寫上面的(de)代碼,如(ru)下:
#define square(x) ((x) * (x))
宏(hong)名稱和左圓括號之間不允許有(you)空格
#include <stdio.h>
#define MAX(x,y) ((x) > (y) ? (x) : (y))
int main(void) {
printf("Max between 20 and 10 is %d\n", MAX(10, 20));
return 0;
}
int main() {
printf("Hello World!");
return 0;
}
函數由兩部分組成
void myFunction() { // 聲明 declaration
// 函數(shu)體(ti)(要執行的代(dai)碼)(definition)
}
Declaration
聲明函數名稱、返回類型和參數 (如果有)Definition
函數體 (要執行的代碼)// 函數聲明
void myFunction();
// 主要方法(fa)
int main() {
myFunction(); // --> 調用(yong)函(han)數
return 0;
}
void myFunction() {// 函(han)數定義
printf("晚(wan)上好!");
}
// 創(chuang)建函數
void myFunction() {
printf("晚上好!");
}
int main() {
myFunction(); // 調用函數(shu)
myFunction(); // 可以被多次調用
return 0;
}
// 輸出 -> "晚上好!"
// 輸出 -> "晚上好!"
void myFunction(char name[]) {
printf("Hello %s\n", name);
}
int main() {
myFunction("Liam");
myFunction("Jenny");
return 0;
}
// Hello Liam
// Hello Jenny
void myFunction(char name[], int age) {
printf("你(ni)好 %s 你(ni) %d 歲了(le)。\n",name,age);
}
int main() {
myFunction("Liam", 3);
myFunction("Jenny", 14);
return 0;
}
// 你(ni)(ni)好 Liam 你(ni)(ni) 3 歲(sui)了。
// 你好 Jenny 你 14 歲(sui)了(le)。
int myFunction(int x) {
return 5 + x;
}
int main() {
printf("結(jie)果: %d", myFunction(3));
return 0;
}
// 輸出(chu) 8 (5 + 3)
兩個參數
int myFunction(int x, int y) {
return x + y;
}
int main() {
printf("結果: %d", myFunction(5, 3));
// 將結果存儲(chu)在變(bian)量(liang)中
int result = myFunction(5, 3);
printf("結果 = %d", result);
return 0;
}
// 結(jie)果: 8 (5 + 3)
// 結果 = 8 (5 + 3)
int sum(int k);
int main() {
int result = sum(10);
printf("%d", result);
return 0;
}
int sum(int k) {
if (k > 0) {
return k + sum(k - 1);
} else {
return 0;
}
}
#include <math.h>
printf("%f", sqrt(16)); // 平方根(gen)
printf("%f", ceil(1.4)); // 四舍五入 (入)
printf("%f", floor(1.4)); // 四舍(she)五入(ru) (舍(she))
printf("%f", pow(4, 3)); // x(4)的y(3)次方
abs(x)
絕對值acos(x)
反余弦值asin(x)
反正弦值atan(x)
反正切cbrt(x)
立方根cos(x)
余弦exp(x)
Ex 的值sin(x)
x 的正弦值tan(x)
角度的正切struct MyStructure { // 結構聲明
int myNum; // 成員(int 變量)
char myLetter; // 成(cheng)員(char 變量(liang))
}; // 用分(fen)號結(jie)束結(jie)構
創建一個名為 s1
的結構變量
struct myStructure {
int myNum;
char myLetter;
};
int main() {
struct myStructure s1;
return 0;
}
struct myStructure {
int myNum;
char myLetter;
char myString[30]; // String
};
int main() {
struct myStructure s1;
strcpy(s1.myString, "Some text");
// 打印值
printf("我字(zi)符(fu)串: %s", s1.myString);
return 0;
}
使用 strcpy
函數為字符串賦值
// 創建一個名為(wei) myStructure 的結構
struct myStructure {
int myNum;
char myLetter;
};
int main() {
// 創建一個名為 s1 的 myStructure 結構變(bian)量(liang)
struct myStructure s1;
// 為 s1 的成員賦值
s1.myNum = 13;
s1.myLetter = 'B';
// 創(chuang)建(jian)一(yi)個(ge)名為 s2 的 myStructure 結構變量
// 并為其(qi)賦值
struct myStructure s2 = {13, 'B'};
// 打(da)印值
printf("My number: %d\n", s1.myNum);
printf("My letter: %c\n", s1.myLetter);
return 0;
}
創建不同的結構變量
struct myStructure s1;
struct myStructure s2;
// 為(wei)不同的(de)結構變(bian)量賦值
s1.myNum = 13;
s1.myLetter = 'B';
s2.myNum = 20;
s2.myLetter = 'C';
struct myStructure s1 = {
13, 'B', "Some text"
};
struct myStructure s2;
s2 = s1;
示例中,將 s1
的值復制到 s2
// 創建一(yi)個結構變(bian)量并為其賦(fu)值
struct myStructure s1 = {
13, 'B'
};
// 修改值
s1.myNum = 30;
s1.myLetter = 'C';
// 打印值
printf("%d %c %s",
s1.myNum,
s1.myLetter);
函數 | 描述 Description |
---|---|
fopen() | 打開 新文件或現有文件 |
fprintf() | 將數據寫入 文件 |
fscanf() | 從文件中讀取 數據 |
fputc() | 將一個字符寫入 文件 |
fgetc() | 從文件中讀取 一個字符 |
fclose() | 關閉 文件 |
fseek() | 將文件指針設置到給定位置 |
fputw() | 將整數寫入 文件 |
fgetw() | 從文件中讀取 一個整數 |
ftell() | 返回當前位置 |
rewind() | 將文件指針設置為文件的開頭 |
C 庫中有許多函數可以打開
/讀取
/寫入
/搜索
和關閉
文件
模式 Mode | 描述 Description |
---|---|
r | 以讀取 模式打開一個文本文件,允許讀取文件 |
w | 以寫 模式打開一個文本文件,允許寫入文件 |
a | 以追加 模式打開一個文本文件如果文件不存在,則會創建一個新文件 |
r+ | 以讀寫 模式打開一個文本文件,允許讀寫文件 |
w+ | 以讀寫 模式打開一個文本文件,允許讀寫文件 |
a+ | 以讀寫 模式打開一個文本文件,允許讀寫文件 |
rb | 以讀取 模式打開二進制文件 |
wb | 以寫入 模式打開二進制文件 |
ab | 以追加 模式打開二進制文件 |
rb+ | 以讀寫 模式打開二進制文件 |
wb+ | 以讀寫 模式打開二進制文件 |
ab+ | 以讀寫 模式打開二進制文件 |
#include<stdio.h>
void main( ) {
FILE *fp;
char ch;
fp = fopen("file_handle.c", "r");
while (1) {
ch = fgetc(fp);
if (ch == EOF)
break;
printf("%c", ch);
}
fclose(fp);
}
對文件執行所有操作后,必須關閉 fclose()
該文件
#include <stdio.h>
main() {
FILE *fp;
fp = fopen("file.txt", "w"); // 打開文件(jian)
// 將(jiang)數據寫入文件
fprintf(fp, "fprintf 的 Hello 文件..\n");
fclose(fp); // 關閉文(wen)件
}
#include <stdio.h>
main(){
FILE *fp;
char buff[255]; // 創建char數(shu)組存儲文件數(shu)據(ju)
fp = fopen("file.txt", "r");
while(fscanf(fp, "%s", buff)!=EOF) {
printf("%s ", buff);
}
fclose(fp);
}
#include <stdio.h>
main(){
FILE *fp;
fp = fopen("file1.txt", "w"); // 打(da)開文件
fputc('a',fp); // 將(jiang)單個(ge)字符寫入文(wen)件
fclose(fp); // 關閉文件
}
#include<stdio.h>
#include<conio.h>
void main() {
FILE *fp;
char c;
clrscr();
fp=fopen("myfile.txt", "r");
while((c=fgetc(fp))!=EOF){
printf("%c", c);
}
fclose(fp);
getch();
}
#include<stdio.h>
#include<conio.h>
void main(){
FILE *fp;
clrscr();
fp = fopen("myfile2.txt","w");
fputs("hello c programming",fp);
fclose(fp);
getch();
}
#include<stdio.h>
#include<conio.h>
void main() {
FILE *fp;
char text[300];
clrscr();
fp=fopen("myfile2.txt", "r");
printf("%s", fgets(text, 200, fp));
fclose(fp);
getch();
}
#include <stdio.h>
void main(){
FILE *fp;
fp = fopen("myfile.txt","w+");
fputs("This is Book", fp);
// 將(jiang)文件(jian)指針設置(zhi)到給定位置(zhi)
fseek(fp, 7, SEEK_SET);
fputs("Kenny Wong", fp);
fclose(fp);
}
將文件指(zhi)針(zhen)設(she)置到給定位置
#include<stdio.h>
#include<conio.h>
void main(){
FILE *fp;
char c;
clrscr();
fp=fopen("file.txt", "r");
while((c=fgetc(fp)) != EOF){
printf("%c", c);
}
rewind(fp); // 將文件(jian)指針移動到文件(jian)的開(kai)頭(tou)
while((c=fgetc(fp)) != EOF){
printf("%c", c);
}
fclose(fp);
getch();
}
// 輸出
// Hello World!Hello World!
#include <stdio.h>
#include <conio.h>
void main (){
FILE *fp;
int length;
clrscr();
fp = fopen("file.txt", "r");
fseek(fp, 0, SEEK_END);
length = ftell(fp); // 返回當前位(wei)置
fclose(fp);
printf("文件大(da)小: %d bytes", length);
getch();
}
// 輸(shu)出
// 文件大(da)小(xiao): 18 bytes
安裝 Docker
創建 Dockerfile
文件
FROM alpine:3.14
RUN apk add --no-cache gcc musl-dev
RUN apk add --no-cache g++
生成本地(di) myalpine 鏡像
docker build -t myalpine .
運行映像,把當前路徑 ($PWD)
映射至容器的 /test
目錄,用 gcc
編譯程序,exit
返回
docker run -it -v $PWD:/test myalpine
root@b1a38bd7107a:/# cd test
root@b1a38bd7107a:/test# gcc -o hello hello.c
Hello World
root@b1a38bd7107a:/test# exit
exit