如何提前結束呢?一個簡單的想法是比對 userID 中每一個字元陣列的第一個字元,如果是 '\0' 就表示那是個沒有資料的空字串,因此就不需要列印出來,空字串以後的資料依據我們目前程式版本,也就是利用 counter 記錄 userID 的索引,也都會是空字串,所以遇到空字串就可以直接以 break 陳述跳出迴圈。
這個概念是準備加入以下的程式碼
93 94 95 96 97 98 99 | for (j = 0; j < SIZE; j++) { if (userID[j][0] == '\0' ) { break ; } printf ( "%s - %s\n" , userID[j], userCODE[j]); } |
因為之前比對帳號、密碼的 for 迴圈已經用了變數 i 當迴圈變數,所以這裡改用 j 當迴圈變數,同樣的,別忘了用到新變數要先宣告
34 35 36 | // 宣告狀態變數、迴圈變數及陣列索引值變數 int state, i, j; int counter; |
管理模式的 while (1) 迴圈內容要調整如下
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | 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 的全部資料列印出來,有什麼方式可以便於檢視資料?
沒有留言:
張貼留言