練習 C:建立一個簡單的電話簿應用程式
學習C語言程式設計的最佳方法之一就是進行實作練習。本文將帶您逐步完成我最近完成的一個專案:建立一個簡單的電話簿應用程式。此程式可讓您新增、檢視和刪除聯絡人,並示範了C語言中的檔案處理和基本資料管理。
程式碼詳解
以下是電話簿應用程式的完整代碼:
#include <stdio.h> #include <string.h> // 函数声明 void addContact(char name[], char number[]); void viewContacts(); void deleteContact(char name[]); int main() { int choice; char name[20]; char number[20]; printf("-- 欢迎使用您的电话簿! -- \n"); do { // 显示菜单 printf("\n您想执行什么操作?\n"); printf("1. 创建新联系人\t 2. 查看电话簿\t 3. 删除联系人\t 4. 退出\n"); scanf("%d", &choice); switch (choice) { case 1: // 添加新联系人 printf("很好,让我们创建一个新的联系人:\n"); printf("输入联系人的姓名:\n"); scanf("%s", name); printf("现在输入电话号码:\n"); scanf("%s", number); addContact(name, number); break; case 2: // 查看电话簿 printf("这是您的电话簿:\n"); viewContacts(); break; case 3: // 删除联系人 printf("输入要删除的联系人的姓名:\n"); scanf("%s", name); deleteContact(name); break; } } while (choice != 4); // 循环直到用户选择“退出” return 0; } // 向电话簿添加联系人的函数 void addContact(char name[], char number[]) { FILE *pFile; pFile = fopen("Phonebook.txt", "a"); if (pFile == NULL) { printf("打开电话簿时出错。"); return; } fprintf(pFile, "姓名: %s \t 电话: %s\n", name, number); printf("联系人已创建!\n"); fclose(pFile); } // 查看电话簿中所有联系人的函数 void viewContacts() { char fileContent[200]; FILE *pFile; pFile = fopen("Phonebook.txt", "r"); while (fgets(fileContent, sizeof(fileContent), pFile)) { printf("\n%s", fileContent); } fclose(pFile); } // 从电话簿中删除联系人的函数 void deleteContact(char name[]) { FILE *pFile, *pTrash; char line[200], contactName[20], contactNumber[20]; pFile = fopen("Phonebook.txt", "r"); pTrash = fopen("Trash.txt", "w"); if (pFile == NULL || pTrash == NULL) { printf("打开文件时出错。"); return; } while (fgets(line, sizeof(line), pFile)) { sscanf(line, "姓名: %s \t 电话: %s\n", contactName, contactNumber); if (strcmp(name, contactName) != 0) { fputs(line, pTrash); } } fclose(pFile); fclose(pTrash); // 将旧的电话簿替换为更新后的版本 remove("Phonebook.txt"); rename("Trash.txt", "Phonebook.txt"); printf("联系人已删除。"); }
程式功能
此程式實現了三個關鍵功能:
-
新增聯絡人:
- 允許使用者輸入姓名和電話號碼。
- 將聯絡人儲存在名為Phonebook.txt的檔案中。
-
查看聯絡人:
- 讀取並顯示所有儲存在Phonebook.txt中的聯絡人。
-
刪除聯絡人:
- 根據使用者輸入的姓名刪除聯絡人。
- 建立一個暫存檔案來過濾掉已刪除的聯絡人,然後取代原始檔案。
從此練習中獲得的關鍵知識
-
C語言中的文件處理:
- 使用fopen、fclose和檔案操作函數。
- 處理無法開啟或存取檔案時的錯誤。
-
字串處理:
- 使用strcmp和sscanf等函數進行字串比較和解析。
-
基本資料管理:
- 在簡單的文字檔案中儲存和組織資料。
- 透過建立臨時檔案來取代或更新檔案內容。
如何測試程式碼
- 將程式碼複製到.c檔案中,並使用C編譯器(例如gcc)進行編譯:
gcc -o phonebook phonebook.c
- 執行編譯後的程式:
./phonebook
- 依照螢幕上的指示新增、檢視或刪除聯絡人。
- 開啟Phonebook.txt以驗證資料是否如預期儲存。
潛在的改進
此程式是一個很好的起點,但以下是您可以嘗試的一些改進:
-
輸入驗證:
- 確保電話號碼有效(例如,只有數字字元)。
- 防止電話簿中出現重複的姓名。
-
改進的使用者介面:
- 提供更詳細的說明。
- 使用fgets而不是scanf允許使用多重單字名稱。
-
增強的文件處理:
- 加密資料以確保安全性。
- 使用結構化格式(例如CSV或JSON)。
-
進階功能:
- 實現搜尋功能以快速找到聯絡人。
- 按字母順序排序電話簿。
總結
這個練習幫助我加強了對C語言中文件處理和基本資料管理的理解。它是一個簡單而實用的程序,可以作為更複雜項目的基石。如果您是C語言新手,請嘗試一下—這是一個有趣且有益的程式設計練習方式!
以上是練習 C:建立一個簡單的電話簿應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C語言數據結構:樹和圖的數據表示與操作樹是一個層次結構的數據結構由節點組成,每個節點包含一個數據元素和指向其子節點的指針二叉樹是一種特殊類型的樹,其中每個節點最多有兩個子節點數據表示structTreeNode{intdata;structTreeNode*left;structTreeNode*right;};操作創建樹遍歷樹(先序、中序、後序)搜索樹插入節點刪除節點圖是一個集合的數據結構,其中的元素是頂點,它們通過邊連接在一起邊可以是帶權或無權的數據表示鄰

文件操作難題的真相:文件打開失敗:權限不足、路徑錯誤、文件被佔用。數據寫入失敗:緩衝區已滿、文件不可寫、磁盤空間不足。其他常見問題:文件遍歷緩慢、文本文件編碼不正確、二進製文件讀取錯誤。

C語言函數是代碼模塊化和程序搭建的基礎。它們由聲明(函數頭)和定義(函數體)組成。 C語言默認使用值傳遞參數,但也可使用地址傳遞修改外部變量。函數可以有返回值或無返回值,返回值類型必須與聲明一致。函數命名應清晰易懂,使用駝峰或下劃線命名法。遵循單一職責原則,保持函數簡潔性,以提高可維護性和可讀性。

C語言函數名定義包括:返回值類型、函數名、參數列表和函數體。函數名應清晰、簡潔、統一風格,避免與關鍵字衝突。函數名具有作用域,可在聲明後使用。函數指針允許將函數作為參數傳遞或賦值。常見錯誤包括命名衝突、參數類型不匹配和未聲明的函數。性能優化重點在函數設計和實現上,而清晰、易讀的代碼至關重要。

C語言函數是可重複利用的代碼塊,它接收輸入,執行操作,返回結果,可將代碼模塊化提高可複用性,降低複雜度。函數內部機制包含參數傳遞、函數執行、返回值,整個過程涉及優化如函數內聯。編寫好的函數遵循單一職責原則、參數數量少、命名規範、錯誤處理。指針與函數結合能實現更強大的功能,如修改外部變量值。函數指針將函數作為參數傳遞或存儲地址,用於實現動態調用函數。理解函數特性和技巧是編寫高效、可維護、易理解的C語言程序的關鍵。

C35 的計算本質上是組合數學,代表從 5 個元素中選擇 3 個的組合數,其計算公式為 C53 = 5! / (3! * 2!),可通過循環避免直接計算階乘以提高效率和避免溢出。另外,理解組合的本質和掌握高效的計算方法對於解決概率統計、密碼學、算法設計等領域的許多問題至關重要。

算法是解決問題的指令集,其執行速度和內存佔用各不相同。編程中,許多算法都基於數據搜索和排序。本文將介紹幾種數據檢索和排序算法。線性搜索假設有一個數組[20,500,10,5,100,1,50],需要查找數字50。線性搜索算法會逐個檢查數組中的每個元素,直到找到目標值或遍歷完整個數組。算法流程圖如下:線性搜索的偽代碼如下:檢查每個元素:如果找到目標值:返回true返回falseC語言實現:#include#includeintmain(void){i

C#和C 的歷史與演變各有特色,未來前景也不同。 1.C 由BjarneStroustrup在1983年發明,旨在將面向對象編程引入C語言,其演變歷程包括多次標準化,如C 11引入auto關鍵字和lambda表達式,C 20引入概念和協程,未來將專注於性能和系統級編程。 2.C#由微軟在2000年發布,結合C 和Java的優點,其演變注重簡潔性和生產力,如C#2.0引入泛型,C#5.0引入異步編程,未來將專注於開發者的生產力和雲計算。
