day 14 C語言字串處理和清空緩衝區

2021-08-04 20:16:23 字數 1538 閱讀 3489

字串(string):

一串字元,即若干個字元構成的乙個序列

c語言中沒有字串型別,只能用字元陣列表示字串,為了方便對字串的處理,c語言提供了很多簡化寫法

c語言規定,乙個合法的字串的最後乙個字元必須為'\0',即'\0'為字串結束標誌

char a[5]=;

char b[5]=;

在執行標準輸入(比如呼叫scanf或getchar)時,我們鍵入的字元在我們按下回車鍵後會進入標準輸入緩衝區中,scanf這些函式只是從這個緩衝區中取走相應型別的資料,如果呼叫函式時這個緩衝區中沒有任何資料,這些函式會等待使用者按鍵輸入;如果緩衝區中有資料,但不是scanf函式所期望型別的資料,那麼scanf函式就會立即失敗返回,否則會直接取走相應的資料,不會等待

型別強行轉換:

(型別)

int a=8;

char b;

b=a;

指標型別轉換:

不同基型別指標可以任意轉型

void型指標可以用來表示一切型別的指標(一切皆空),void*和其他型別指標之間可以自動轉型

scanf(「%c」)

在資料輸入時,如果輸入有誤,往往需要清空緩衝區,以保證下次輸入的準確可靠。

在linux系統中,有時會慣性思維,使用在windows程式設計中常用的方法:

(1)fflush(stdin):

fflush()函式,不是標準c庫中的,只是標準c的擴充套件,所以在linux中,不行。

(2)rewind(stdin):

這個函式是將指標指向流的開始位置,但它是檔案io中的乙個函式,操作的是file型流。在linux中不行。

(3)getchar():

while(getchar()!=』\n』)

; 通過讀取stdin中的剩餘資料並丟棄,來清空緩衝區。getchar()一次讀乙個字元,在linux中,可行!

(4)setbuf(stdin,null):

通過呼叫函式,直接將緩衝區清空(置空或指空)。在linux中可行!(一次性)

(5)fgets():

char zmx[1024];

fgets(s,1024,stdin);

在linux 中,可行的方案,只有(3)、(4)、(5)

重點說明字串(字元陣列)

關於scanf和printf對於字元輸入輸出的一點小缺陷,scanf的 %c 在輸入時會將回車也當做字元,printf %s 輸出時會以 『\0』 位結束標誌,如果在字串中人為的加上 『\0』 ,那麼這個人為加上的』\0』後面的字串將無法正常顯示。

linux下清空緩衝區:

1、通過getchar():

while(getchar()!=』\n』)

; 2、setbuf(stdin,null):

通過呼叫函式,直接將緩衝區清空(置空或指空)。在linux中可行!(一次性)

3、通過fgets():

char zmx[1024];

fgets(s,1024,stdin);

C語言字串處理

字串 char str 20 char str1 5 str1 1 x str1 3 y int i 0 for i 0 i 5 i char str2 0表示字串結束 printf s str2 定義大小時,要比實際大1.存放 0 與字串相關的函式 需要匯入標頭檔案 include char st...

字串處理(c語言)

提交 統計 提問 題目描述 讀入兩個字串,字串除了數字還可能包括 e e 相加之後輸出結果,如果是浮點型,要求用科學計數法表示 最多包含10個有效數字 輸入描述 輸入包含多組測試資料。每組輸入佔兩行,每行乙個字串,測試資料保證字串的構成嚴格按照題目中的描述。輸出描述 輸出兩個數字相加的結果,每組輸出...

字串處理(c語言)

提交 統計 提問 題目描述 讀入兩個字串,字串除了數字還可能包括 e e 相加之後輸出結果,如果是浮點型,要求用科學計數法表示 最多包含10個有效數字 輸入描述 輸入包含多組測試資料。每組輸入佔兩行,每行乙個字串,測試資料保證字串的構成嚴格按照題目中的描述。輸出描述 輸出兩個數字相加的結果,每組輸出...