C语言的高手请来解释一下,本来菜鸟,才接触C.

我是一名新手,接触C语言不久,很多东西都不明白.我前几天看到一个通讯录的程序,但是很多代码都看不懂.请大虾们解释一下.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct AddressList
{

char name[20];
char address[30];
char tel[20];
char youbian[50];
}st[20];

int i=0;

void shuru()
{
FILE *fp;
char a;
fp=fopen("information.txt","a+");
do
{

printf("\n请输入姓名:");
scanf("%d",&st[i].name);
gets(st[i].name);
printf("\n");
printf("\n请输入地址:");
gets(st[i].address);
fflush(stdin);
printf("\n请输入电话:");
gets(st[i].tel);
fflush(stdin);
printf("\n请输入邮编:");
gets(st[i].youbian);
fflush(stdin);
fwrite(&st[i],sizeof(struct AddressList),1,fp);
printf("\n是否继续输入另外一个人的信息?(y/n)");
fflush(stdin);
a=getchar();
i++;
}
while(a=='y'&&i<=20);
fclose(fp);
}

int xianshi()
{
int j;FILE *fp;
if((fp=fopen("information.txt","r"))==NULL)
{
printf("通讯录还没记录");
return 0;
}
printf("\t姓名\t电话\t地址\t邮编\n");
for(j=0;fread(&st[j],sizeof(struct AddressList),1,fp)!=0;j++)
printf("\t%s\t%s\t%s\t%s\n",st[j].name,st[j].tel,st[j].address,st[j].youbian);
return 1;

}

int chazhao()
{
int m;FILE *fp;
char name[20],b;
if((fp=fopen("information.txt","r"))==NULL)
{
printf("还没有通讯信息");
return 0;
}
do
{
printf("\n请输入你需要查找人的姓名:");
fflush(stdin);
gets(name);
for(m=0;fread(&st[m],sizeof(struct AddressList),1,fp)!=0;m++)
{
if(strcmp(name,st[m].name)==0)
{
printf("\n\t你查找的联系人在第%d个位置找到\n",m+1);
break;
}
}
对不起,由于代码太长,我放在了贴吧下http://tieba.baidu.com/f?kz=590496584
请在第6楼开始看
如果可以的话尽可能的详细一点,比如 #include<stdlib.h>是什么和什么代码连接,虚心请教,请见谅.

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct AddressList //这里声明一个通讯录结构,
保存一个人的信息
{

char name[20];
char address[30];
char tel[20];
char youbian[50];
}st[20]; //这里声明一个20元素的通讯
录 数组,可以保存20个人的

int i=0; //全局变量,指示数组的元素

void shuru() //这是逐个输入一个通讯录的各条
信息处理函数
{
FILE *fp;
char a;
fp=fopen("information.txt","a+"); //打开information.txt文件
这里是通讯录记录文件
最后的信息会放到这个文件
do
{

printf("\n请输入姓名:");
scanf("%d",&st[i].name); //多了?
gets(st[i].name); //输入名字
printf("\n");
printf("\n请输入地址:");
gets(st[i].address); //输入地址
fflush(stdin); //清空输入缓冲
printf("\n请输入电话:");
gets(st[i].tel); //
fflush(stdin);
printf("\n请输入邮编:");
gets(st[i].youbian); //
fflush(stdin);
fwrite(&st[i],sizeof(struct AddressList),1,fp); //将结构写入文件
printf("\n是否继续输入另外一个人的信息?(y/n)");
fflush(stdin);
a=getchar();
i++;
}
while(a=='y'&&i<=20); //如果输入y则关闭文件
fclose(fp);
}

int xianshi() //显示文件中的记录
{
int j;FILE *fp;
if((fp=fopen("information.txt","r"))==NULL) //打开文件句柄
{
printf("通讯录还没记录");
return 0;
}
printf("\t姓名\t电话\t地址\t邮编\n");
for(j=0;fread(&st[j],sizeof(struct AddressList),1,fp)!=0;j++) //读
//结构,分别打印出里面的各个属性
printf("\t%s\t%s\t%s\t%s\n",st[j].name,st[j].tel,st[j].address,st[j].youbian);
return 1;

}

int chazhao() //查找文件中有没有这个人
{
int m;FILE *fp;
char name[20],b;
if((fp=fopen("information.txt","r"))==NULL) //打开文件
{
printf("还没有通讯信息");
return 0;
}
do
{
printf("\n请输入你需要查找人的姓名:");
fflush(stdin); //清空输入缓冲
gets(name); //读取名字

//下面顺序读取文件中的每个结构,判断这个结构中的姓名是不是
//要找的那个
for(m=0;fread(&st[m],sizeof(struct AddressList),1,fp)!=0;m++)
{
if(strcmp(name,st[m].name)==0) //这里是个字符串比较函数,相同返
//回0
{
printf("\n\t你查找的联系人在第%d个位置找到\n",m+1);
break;
}
}
问题补充:
if(m>=20) //到第20个之后都没找
//到,说明不存在这样
//的
printf("\n\t没有找到这个人\n");
else
{ //此时打印此人的所
//有信息
printf("\t姓名\t电话\t地址\t邮编\n");
printf("\t%s\t%s\t%s\t%s\n",st[m].name,st[m].address,st[m].tel,st[m].youbian);
}
printf("\n是否查找另一个人的信息?(y/n)");
fflush(stdin);
b=getchar();
}
while (b=='y');
return 1;
}

int shanchu() ///删除特定的记录
{
char name[20],c;FILE *fp,*fp1;
int a,flag=0;
if((fp=fopen("information.txt","r"))==NULL) //打开
{
printf("还没有学生信息");
return 0;
}
fp1=fopen("informationl.txt","w");
do
{
printf("\n请输入要删除人的姓名:\n");
fflush(stdin);
gets(name); //同上,顺序查找
for(a=0;fread(&st[a],sizeof(struct AddressList),1,fp)!=0;a++)
{
if(strcmp(name,st[a].name)!=0) //找到不是这个名字的,就把这
//条记录写到另一个文件fp1中
fwrite(&st[a],sizeof(struct AddressList),1,fp1);
else
flag=1;
}
fclose(fp);
fclose(fp1); //关闭文件
fp=fopen("information.txt","w");
fp1=fopen("informationl.txt","r"); //再把informationl.txt中的东西写回
//information.txt中
for(a=0;fread(&st[a],sizeof(struct AddressList),1,fp1)!=0;a++)
{
fwrite(&st[a],sizeof(struct AddressList),1,fp);
}
fclose(fp);
fclose(fp1); //关闭文件
if(flag==0)
printf("\t没有找到这个人\n");
else
xianshi();
printf("\n是否继续删除另一个联系人的信息?(y/n)");
fflush(stdin);
c=getchar();
}
while(c=='y'); /同上
return 1;
}

void charu() //纯调用
{
xianshi();
shuru();

}

void jieshu() //自己看
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\t\t欢迎使用次通讯录\t\n");
printf("\n");
printf("\n");
printf("\n");
printf("\t\t\t07电专班:田依轩\t\t\n");
}

void main()
//主函数先初始化之后,就让你输入change的值,根据你的需
//要输入,用switch来决定调用什么函数
{
int change;
do
{
system("cls");
printf("================================欢迎来到通讯录=================================\n");
printf("\t\t1: 输入\n");
printf("\t\t2: 显示\n");
printf("\t\t3: 查找\n");
printf("\t\t4: 删除\n");
printf("\t\t5: 插入\n");
printf("\t\t6: 退出程序\n");
fflush(stdin);
printf("\t\t请在以下功能选项中选择:");
scanf("%d",&change);
switch(change)
{
case 1:
shuru();break;
case 2:
xianshi();break;
case 3:
chazhao();break;
case 4:
shanchu();break;
case 5:
charu();break;
case 6:
jieshu();break;
}
getch();
}
while(change!=6);
}
程序要多看,自然就会了
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言高手进 帮我解答个问题 我是菜鸟
这是个二维字符数组,不能直接输出的,所以要用循环讲数组里的元素一个一个的输出

c语言,本人菜鸟,高手来
先看下运算符的优先级 ()\/ 除 表达式\/表达式 左到右 双目运算符 乘 表达式*表达式 双目运算符 左到右 余数(取模) 整型表达式\/整型表达式 双目运算符 左到右 + 加 表达式+表达式 左到右 先算(),x+a%3*(int)(x+y)%2\/4 = x+a%3*7%2\/...

C语言高手来教教《我是菜鸟》
阶乘的计算,你可以多看看其他的程序例题,相信就简单多了。

我想学习C语言。求高手指点应该怎么做?
1、学习C语言,要从入门到精通,需要读哪些书(从简单的到难的排序,越详细越好,最好都能注释下选择这本书的理由)?入门阶段:还是老谭那本。理由:虽然不能说它写得有多好,但是你现在要做的是入门,要快速的掌握c的基本语法,这本书很好理解,能够让你在最短的时间内大致掌握这门语言的概更。

C语言菜鸟求高手解答...
1. 第一个问题似乎是一个关于C语言条件判断的疑问。你需要明确表达你的问题,以便得到具体的解答。2. 在C语言中,`m++` 表示先使用变量 `m` 的值,然后将 `m` 的值加1。所以,表达式 `m++ > 5` 首先将 `m` 的值(初始为5)用于比较,然后 `m` 自增。3. 由于 `m` 的初始值是5,...

C语言问题我是菜鸟求步骤解释 题在下边图里 输出一下图案那到
h>void main(){int i,j,k;for(i=0;i<=3;i++){for(j=0;j<=2-i;j++)printf(" ");for(k=0;k<=2*i;k++)printf("*");printf("\\n");}for(i=0;i<=2;i++){for(j=0;j<=i;j++)printf(" ");for(k=0;k<=4-2*i;k++)printf("*");printf("\\n");} } ...

C语言高手进!我是菜鸟请教
include<stdio.h> void main(){ int a,b,c;for(a=0;a<=20;a++)for(b=0;b<=33;b++)for(c=0;c<=300;c=c+3){if(5*a+3*b+c\/3==100&&a+b+c==100)printf("公鸡%d个母鸡%d个小鸡%d个\\n",a,b,c);} }

C语言不会,求高手,我是菜鸟
main(){ char b1,b2,b3,b4,b5;b1='A';b2='B';b3='C';b4='D';b5='E';printf("b1=%c\\nb2=%c\\nb3=%c\\nb4=%c\\nb5=%c\\n",b1,b2,b3,b4,b5);b1=b1+4;b2=b2+4;b3=b3+4;b4=b4+4;b5=b5+4;printf("b1=%c\\nb2=%c\\nb3=%c\\nb4=%c\\nb5=%c\\n",b1,b2,b3...

c语言菜鸟 求详解啊
答案选C.ex变量在此是共用体变量,里面数据公用一个空间(最大那个),此处占用空间最大的为int型和float型,char只占用一个。所以三个变量一共只占4个字节就够了。故选C

c语言问题,菜鸟找高手。。在线等答案。。急
1.n=0;2.n=n*10+((S[i]-48)%10);

相似回答