輸入 N 條通訊錄記錄(姓名、生日、性別、固話、手機),然後輸入 K 個查詢索引,輸出對應記錄或 "Not Found"。
struct Contact {
char name[11]; // ≤10 字符
char birthday[11]; // yyyy/mm/dd
char gender; // 'M' 或 'F'
char tel[16]; // ≤15 位數字,可含 '+'
char mobile[16];
};
#include <stdio.h>
struct Contact {
char name[11];
char birthday[11];
char gender;
char tel[16];
char mobile[16];
};
int main(void) {
int n;
scanf("%d", &n);
getchar(); // 吸收換行
struct Contact contacts[n]; // C99 變長數組(VLA)
// 錄入
for (int i = 0; i < n; i++) {
scanf("%10s %10s %c %15s %15s",
contacts[i].name,
contacts[i].birthday,
&contacts[i].gender,
contacts[i].tel,
contacts[i].mobile);
getchar();
}
int k;
scanf("%d", &k);
int query[k];
for (int i = 0; i < k; i++)
scanf("%d", &query[i]);
// 查詢輸出
for (int i = 0; i < k; i++) {
int idx = query[i];
if (idx >= 0 && idx < n) {
printf("%s %s %s %c %s\n",
contacts[idx].name,
contacts[idx].tel,
contacts[idx].mobile,
contacts[idx].gender,
contacts[idx].birthday);
} else {
printf("Not Found\n");
}
}
return 0;
}
struct Contact contacts[n] 根據運行時輸入 N 動態分配棧內存,避免固定大小數組浪費或溢出(需編譯器支持 C99)%10s 限制最大讀取字符數,防止緩衝區溢出%c 前需處理殘留空白符,此處 scanf 格式串中 %10s 後緊跟 %c 會正確讀取下一個非空白字符idx >= 0 && idx < n 對應題目編號 0 到 N-1scanf 字符串長度導致緩衝區溢出struct Contact *contacts = malloc(n * sizeof(struct Contact)); // ... 使用後 free(contacts);