C語言鍊錶通訊錄問題總結

2021-08-15 16:06:39 字數 1392 閱讀 6278

1.定義鍊錶時

typedef struct node

node;

typedef node *llist;

容易出現從不相容的指標型別賦值 從不相容的指標型別初始化

原因:第一行的node必須有,而且必須和node*next中的一致,所以建議改為

typedef struct node

31 node;

34 35 typedef node *llist;

2.檔案程式設計時

if((fp=fopen(fname,"r"))==null )正確

if(fp=fopen(fname,"r")==null)錯誤

出現警告: 賦值時將整數賦給指標,未作型別轉換 [預設啟用]

3.

錯誤: expected declaration or statement at end of input

這是因為大括號的少乙個,括號的個數不成對,仔細在出錯的函式中查詢,即可。

4.在呼叫主選單時,scanf讀取sel反覆執行,所以

%c前要輸入乙個空格, scanf(" %c",&c);

這個空格非常重要,而且容易忽視,當我按3全部刪除時,第一次成功第二次按3提示錯誤輸入,找了很久終於找到原因:

%c前面的空格就是用來遮蔽空白符的

1、緩衝區

緩衝區是一塊存放臨時輸入資料的記憶體,我們在鍵盤上輸入資料之所以不會馬上顯示,就是因為資料存放在了緩衝區,在上面例子中,當我們按下回車鍵後,緩衝區的資料會傳送到標準輸入流。

2、標準輸入流

標準輸入流(stdin)是檔案指標,scanf()就是從標準輸入流獲取資料。 

以上面**為例,當執行到scanf()時,開始等待使用者輸入,當我們輸入資料,在按下回車鍵前會把資料儲存在緩衝區,按下回車鍵後,會把資料以及換行符(\n)一起傳送到標準輸入流(stdin)中,scanf()就是從標準輸入流中或許資料,上面第乙個scanf()要讀入乙個整數,它從標準輸入流中查詢,跳過空白符(空格、換行符、製表符),如果遇到數字,則開始讀入,直到遇到非數字的字元結束,最後計算讀取到的數值,儲存到相關變數中。

所以對於scanf()而言,%c是個較為特殊的說明符。 %c前沒空格,scanf()將讀取標準輸入流中的第乙個字元,%c前有空格,scanf()則讀取標準輸入流中第乙個非空白字元。

鍊錶通訊錄

include include include define password 208140119 define name max 20 define gender max 10 define str max 20 define tel max 20 鍊錶結構 struct address type...

鍊錶通訊錄

include include include include include struct addressbook typedef struct addressbook addressbook typedef struct addressbook link int main menu void a...

基於c語言鍊錶的通訊錄

本人使用makefile檔案,所以總 分為四部分 tele.h ifndef tele h define tele h include include includestruct node typedef struct node node typedef struct node link void ...