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文件还是二进制文件 )
插入地点以后的数据 要 往下推一个 结构长度,要从最后一个 结构起,读一个写一个,读一个写一个,一直做到插入位置。
递推完必,写入新的插入数据。
windows7 C语言编译软件
visual studio Express是免费的。
Dev C++的编译器就是GCC。运行出错应该是你的代码的原因。