第二十五讲 综合运用C(1)

      关于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:%sn”,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:%sn”,Book[i].name,Book[i].TelNumber);

system(“PAUSE”);

return 0;

}
———————————
现在我们来看下运行情况:
第二十五讲 综合运用C(1)
嗯,这哪里有些不对劲呢?太不对劲了,如果我们要添加联系人信息这么复杂的话,这手机不买也罢。我们现在想要的是随意的添加,随意的删除联系人,这个问题留给大家去考虑吧,明天我们再来揭晓这个实现,如果大家想要学习泛型,学习抽象对象,这是一个很好的锻炼机会,也算是为C++打一个基础。

发表评论