c语言编程实战:用数组与函数开发简易通讯录程序

admin C语言 4


你是不是学完数组和函数还是觉得没头绪?看了好多理论,一到自己写程序就卡壳?其实啊,编程就得动手练,今天兔子哥就带着你用数组和函数做个简易通讯录,做完你就知道这些知识点怎么用了。这个程序不难,新手也能跟着做,一起往下看吧!

先想清楚:简易通讯录该有啥功能?


做程序前得先想好要实现啥。一个简单的通讯录,至少得能存联系人的名字和电话吧?然后还得能添加、查看、查找联系人。总不能存了之后看不了,那有啥用呢。
可能有人会问,为啥要用数组和函数呢?用数组是因为要存多个联系人,一个挨着一个放方便管理;用函数是把添加、查看这些功能分开写,代码看起来不乱,改的时候也方便。你想啊,要是所有代码都堆在 main 函数里,写着写着自己都晕了。

用结构体存联系人信息,方便!


联系人有名字和电话两个信息,总不能分开存吧?这时候结构体就派上用场了。定义一个结构体,里面放两个字符串,一个存名字,一个存电话:
struct Contact {
char name[20];
char phone[12];
};
这样每个联系人就是一个结构体变量,既有名字又有电话,多整齐。比单独定义两个数组,一个存名字一个存电话好多了,不容易弄混。

数组来帮忙,存一堆联系人


光有单个联系人的结构还不够,咱们得存多个,这就需要结构体数组了。比如定义 struct Contact contacts [100]; 这样就能存 100 个联系人,一般够用了。再用个变量 int count = 0; 记录现在存了多少个,方便后面添加的时候判断是不是满了。
变量用途定义方式好处
存储单个联系人struct Contact c信息不拆分,完整
存储多个联系人struct Contact arr[100]批量管理,方便遍历
记录联系人数量int count知道存了多少,避免越界



功能拆成函数,代码不乱


把每个功能写成一个函数,主函数里就清爽多了。比如添加联系人写个 addContact 函数,查看写个 showContacts 函数。
添加联系人的函数大概这样:
void addContact (struct Contact contacts [], int *count) {
if (*count >= 100) {
printf ("通讯录满了!\n");
return;
}
printf ("输入名字:");
scanf ("% s", contacts [*count].name);
printf ("输入电话:");
scanf ("% s", contacts [*count].phone);
(*count)++;
printf ("添加成功!\n");
}
这里要注意,count 得用指针,因为函数里要修改它的值,不用指针的话,外面的 count 不会变。刚开始学的时候,很多人这里容易错,得记牢。
查看联系人的函数就简单了,用个循环把所有联系人打印出来:
void showContacts (struct Contact contacts [], int count) {
if (count == 0) {
printf ("通讯录是空的!\n");
return;
}
for (int i = 0; i < count; i++) {
printf ("姓名:% s 电话:% s\n", contacts [i].name, contacts [i].phone);
}
}


主函数搭框架,把功能串起来


主函数里用个循环显示菜单,让用户选择要做啥。比如:
int main () {
struct Contact contacts [100];
int count = 0;
int choice;
while (1) {
printf ("1. 添加 2. 查看 3. 查找 0. 退出 \n");
printf ("选一个:");
scanf ("% d", &choice);
if (choice == 0) break;
switch (choice) {
case 1: addContact (contacts, &count); break;
case 2: showContacts (contacts, count); break;
case 3: searchContact (contacts, count); break;
default: printf ("输入错了!\n");
}
}
return 0;
}
这样用户就能一直操作,直到选 0 退出。是不是很像平时用的软件?


查找功能怎么实现?遍历数组比一比


查找联系人就是输入名字,然后在数组里一个个找,找到就显示电话。函数可以这么写:
void searchContact (struct Contact contacts [], int count) {
char name [20];
printf ("输入要找的名字:");
scanf ("% s", name);
for (int i = 0; i < count; i++) {
if (strcmp (contacts [i].name, name) == 0) {
printf ("找到啦:电话是 % s\n", contacts [i].phone);
return;
}
}
printf ("没找到这个人哦 \n");
}
这里用了 strcmp 函数比较字符串,记得加 #include ,不然会报错。新手经常忘了加这个头文件,结果程序编译不过,得注意。
兔子哥第一次写这个程序的时候,把查找里的 strcmp 写成了 ==,结果不管输啥都显示没找到,查了半天才发现错这了。所以啊,字符串比较不能直接用 ==,得用 strcmp,这点要记牢。
其实这个程序还能加删除、修改功能,不过对新手来说,先把这几个功能做好就行。写的时候多调试,比如添加完看看能不能查到,存满了会不会提示。多试几次,遇到错别慌,慢慢改,改着改着就顺了。
我觉得学编程最好的办法就是做这种小项目,比光看书有意思多了,还能知道学的知识点到底咋用。你要是能自己把这个通讯录做出来,再试着加个删除功能,那数组和函数就算掌握得差不多了,真的。

标签: showContacts addContact

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~