如何提前結束呢?一個簡單的想法是比對 userID 中每一個字元陣列的第一個字元,如果是 '\0' 就表示那是個沒有資料的空字串,因此就不需要列印出來,空字串以後的資料依據我們目前程式版本,也就是利用 counter 記錄 userID 的索引,也都會是空字串,所以遇到空字串就可以直接以 break 陳述跳出迴圈。
這個概念是準備加入以下的程式碼
for (j = 0; j < SIZE; j++) { if (userID[j][0] == '\0') { break; } printf("%s - %s\n", userID[j], userCODE[j]); }
因為之前比對帳號、密碼的 for 迴圈已經用了變數 i 當迴圈變數,所以這裡改用 j 當迴圈變數,同樣的,別忘了用到新變數要先宣告
// 宣告狀態變數、迴圈變數及陣列索引值變數 int state, i, j; int counter;
管理模式的 while (1) 迴圈內容要調整如下
while (1) { printf("\n# "); scanf("%s", instruction); // exit 為離開管理模式的指令 if (!strcmp(instruction, "exit")) { break; } // list 為列印使用者列表的指令 if (!strcmp(instruction, "list")) { printf("\n以下為所有註冊使用者的帳號及密碼\n"); printf("\n帳號 - 密碼\n"); for (j = 0; j < SIZE; j++) { if (userID[j][0] == '\0') { break; } printf("%s - %s\n", userID[j], userCODE[j]); } continue; } // search 為查詢帳號指令 if (!strcmp(instruction, "search")) { printf("\n您即將開啟查詢使用者帳號的功能....\n"); continue; } // delete 為刪除帳號指令 if (!strcmp(instruction, "delete")) { printf("\n您即將開啟刪除使用者帳號的功能....\n"); continue; } // sort 為排序指令 if (!strcmp(instruction, "sort")) { printf("\n您即將開啟排序使用者帳號列表的功能....\n"); continue; } }
當我們設計軟體時,通常會先設想軟體會有哪些功能,如果規劃的功能還沒有實作出來,我們可以先用不影響程式執行的程式碼代替,例如以上使用函數 printf() 印出提示訊息。
一旦我們實作出規劃的功能,就可以把實作程式碼加進預計放置的地方,之前置入的程式碼便可刪除了。
完整的範例程式碼及編譯執行,請繼續參考
問題與討論
- 如果只有五個使用者註冊,把 userID 中全部資料列印出來,會得到什麼樣的結果?
- 若是一定要把 userID 的全部資料列印出來,有什麼方式可以便於檢視資料?
沒有留言:
張貼留言