关于C语言的语法知识我们算是说得差不多了,本来打算开始说win32编程的,不过今天和朋友谈起是不是要开始讲win32编程,他的意见是继续说C语言,讲一些实际的程序,一些综合应用。
相信如果有接触过C++的人都一定知道,如今的STL已经例如C++的一部分,当然对我们来说,现在还是不熟悉这是个什么东西,既然这是C++的部分,而我们又不打算说他,这是为什么呢?好吧,弯子不绕,我们直奔主题吧。
相信现在每个人都有一部手机,而且相信手机里面的通信录里面储存了不少的联系人,都储存有名字和电话号码,还可以无限的添加联系人可以直到内存满为止,那这是怎么个原理呢?好吧,我们今天就来探索这个通讯录原理。
说到通讯录,我想大家马上想到我们前些天说的struct。
----------------------------------------
truct TelPhone{
char name[20];
char TelNumber[20];
};
----------------------------------------
嗯,这里似乎有些奇怪,我们为什么把电话号码声明为char类型呢,我们电话号码最少是11位,如果我们设定为int 或者long的话,都无法满足,所以我们只能用字符数组来表示。
-------------------------------------
#include <stdlib.h>
#include <stdio.h>
struct TelPhone{
char name[20];
char TelNumber[20];
};
int main()
{
TelPhone Book;
puts("请输入联系人姓名:");
gets(Book.name);
puts("请输入联系人电话号码:");
gets(Book.TelNumber);
printf("%s:%s\n",Book.name,Book.TelNumber);
system("PAUSE");
return 0;
}
----------------------------------
运行试一下,好像能够满足我们的要求,不过好像只能储存一个联系人啊,怎么办呢?没关系,我们可以定义一个数组嘛:
----------------------------------
TelPhone Book[500];
-----------------------------------
我们让他储存500个联系不就好了吗?嗯,这个办法似乎好像不错,不过,说句真心话,我手机里面联系人至今也就200条,所以,我想说,这500条是不是有点浪费内存了呢?当然话不能这么说,像很多人的手机里面联系人可能比500条还要多,那么对他来说这岂不是一个很大的缺陷吗?原本他们都很喜欢这款手机,但奈何联系人这方面让他们不得不放弃这款手机,这款手机岂不是一个失败的产品吗?
是啊,那怎么解决这个问题呢?动态分配吗?我们在使用的时候还要预先按照自己的需求分配一些内存吗?嗯,这好像不错,我们先来看看。
-----------------------------
#include <stdlib.h>
#include <stdio.h>
struct TelPhone{
char name[20];
char TelNumber[20];
};
int main()
{
TelPhone *Book;
int n;
puts("请问先生打算储存多少条联系人信息?");
scanf("%d",&n);
Book = (TelPhone*)malloc(n*sizeof(TelPhone));
for(int i=0;i<n;i++)
{
puts("请输入联系人姓名:");
scanf("%s",Book[i].name);
puts("请输入联系人电话号码:");
scanf("%s",Book[i].TelNumber);
}
for(int i=0;i<n;i++)
printf("%s:%s\n",Book[i].name,Book[i].TelNumber);
system("PAUSE");
return 0;
}
---------------------------------
现在我们来看下运行情况:
嗯,这哪里有些不对劲呢?太不对劲了,如果我们要添加联系人信息这么复杂的话,这手机不买也罢。我们现在想要的是随意的添加,随意的删除联系人,这个问题留给大家去考虑吧,明天我们再来揭晓这个实现,如果大家想要学习泛型,学习抽象对象,这是一个很好的锻炼机会,也算是为C++打一个基础。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。