c语言代码(在线)

这个程序我见过!地址如下。

程序是没有任何问题的。do..while只是为了提高程序的判断验错能力。给你解释一下:

void insert()

int i=n,j,g; //这里n是全局变量,它记录了总学生数

printf("input number:\n"); //这里是提示要插入(增加的人数),比如要增加10个学生,输入10,只增加1个学生就输入1,这个概念要清楚

scanf("%d",&m);

{ g=1;

while(g)

{ g=0;

printf("iuput %dth telephone:\n",i+1); //提示输入,提示你输入第n+1个学生的数据

scanf("%s",phon[i].tel);

for(j=0;j

if(strcmp(phon[i].tel,phon[j].tel)==0) //对字符串不能直接比较故用字符串比较函数strcmp()判断

{ printf("that have ,please input again!\n"); //相等则说明输入重复,有重复立即退出该层循环并要求重新输入

g=1;

break; //如有重复立即退出该层循环

printf("input %dth name:\n",i+1);

scanf("%s",phon[i].name);

printf("input %dth address:\n",i+1);

scanf("%s",phon[i].add);

printf("input %dth telephone:\n",i+1);

scanf("%s",phon[i].tel);

printf("input %dth E-mail:\n",i+1);

scanf("%s",phon[i].mail);

if(g==0) //如果g==0,说明输入正确(也就是无重复),那么i加1表示实际人数加1

{ i=i; //这句去掉,多余无用

i++;

}while(i

n+=m; //输入完成后总学生数为n+m,把这个数字保存到全局变量中供排序函数等其他函数调用

printf("complate.\n\n");

再说明一点,这里新增加的学生,或者是改动学生的数据都只是保存在内存中,并没有真正写入到硬盘的文件tonxunlu.dat中,所以要把结果保存到文件中,退出程序时必须调用功能模块save()函数将内存中的有关数据(包括增加和改动后的)全部写入到文件tonxunlu.dat中。这一点源程序已经说明得很清楚。

当然如果你不想在退出前执行save()函数模块,可以在insert()函数中的最下面调用该save()函数也可以,也就是:

void insert()

......

n+=m;

save();//这里

printf("complete.\n\n");//此单词写错

}不太明白你所说的插入数据是什么意思,那个insert函数就是实现了将数据存入对应的结构体数组中,如果发现电话号码相同的,跳过重新输入。

不过觉得其中的 do--while 语句好像不太对吧。

}while(condition);

好像没有这种用法吧:while 后面接语句的。

{ g=1;

while(g)//----------

{ g=0;

printf("iuput %dth telephone:\n",i+1);

scanf("%s",phon[i].tel);

for(j=0;j

if(strcmp(phon[i].tel,phon[j].tel)==0)

{ printf("that have ,please input again!\n");

g=1;

break; //如有重复立即退出该层循环

}文件作为可读写文件打开 "r+" 或 "w+" 或 "rb+" 或 "wb+" (取决于原来文件ASCII文件还是二进制文件 )

插入地点以后的数据 要 往下推一个 结构长度,要从最后一个 结构起,读一个写一个,读一个写一个,一直做到插入位置。

递推完必,写入新的插入数据。

c语言在线编译(c语言在线编译器手机版)_c语言在线编译(c语言在线编译器手机版)

windows7 C语言编译软件

visual studio Express是免费的。

Dev C++的编译器就是GCC。运行出错应该是你的代码的原因。