如何提前結束呢?一個簡單的想法是比對 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 的全部資料列印出來,有什麼方式可以便於檢視資料?
沒有留言:
張貼留言