'){      //循环条件是到字符串末尾结束       if(p[i]=='*'){   "og:type" content="webpage">'){      //循环条件是到字符串末尾结束       if(p[i]=='*'){   " /> '){      //循环条件是到字符串末尾结束       if(p[i]=='*'){   "> C语言求解_软件运维_内存溢出

阅读14

C语言求解,第1张

void my_del(char *p)

{

   inti=0,j=0

   while(p[i]!='\0'){      //循环条件是到字符串末尾结束

       if(p[i]=='*'){      //如果当前字符是*,那么把后面的字符全部向前移动/                           //一个字节,实现删除当前的星号的效果,然后还是看

                           //当前的字符是不是星号,如果是,继续删除当前这个

                           //星号,后面的数据依旧向前搬,这里没有对循环变量i                           // *** 作.i是在下面的else里面 *** 作的.

           for(j=ip[j]!='\0'j++)

              p[j]=p[j+1]

       }

       else{

            if(p[i]>='a' && p[i]<='z')  //如果当前字母是小写字母.

                 p[i]=p[i]-32          //减去32,因为ascii表                                                      //中小写字母在大写字母后面,距离                                           //32.

            i++                        //下一个.

       }

   }

}

main()

{

  char a[80]     //字符串 长度80.  gets(a)        //获取字符串,gets没有长度判断,这个函数

有漏洞.如果输入

                  //长度大于80,栈会溢出.

  my_del(a)      //调用功能.传的是指针,对数据直接 *** 作生效.

  puts(a)        //输出结果.

}

#includeintmydel(int*p,intn,intk)voidmyout(int*a,intn)intmain(){inta[10]={1,2,3,4,5,6,7,8,9,10}intn=10,k=0printf("inputtheknumbertodelete\n")scanf("%d",&k)if(k10){printf("inputnumbererror\n")}myout(a,10)n=mydel(a,n,k)myout(a,n)return0}intmydel(int*p,intn,intk){if(k>n||k0)*(p-1)=*p++return--n}voidmyout(int*a,intn){inti=0for(i

本人类似的源代码!!希望对楼主有帮助!!!!

/* Note:Your choice is C IDE */

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#define N 100

struct student

{

char num[20]

char name[20]

char tel[20]

}

/* 以下是函数原型说明,被调函数的定义在主调函数后面时,要加此部分 */

void myprint()

void mycreate()

void mydisplay()

void mysearch()

/* sch_num与sch_name函数被mysearch调用 */

void sch_num(FILE *fp)

void sch_name(FILE *fp)

void mymodify()

void myadd()

void mydelete()

/* del_num与del_name函数被mydelete调用 */

void del_num(FILE *fp)

void del_name(FILE *fp)

void mysort()

/* sort_num与sort_name函数被mysort调用 */

void sort_num()

void sort_name()

void main()

{

char choose,yes_no

do

{

myprint() /* 显示主菜单 */

printf(" ")

choose=getch()

switch(choose)

{

case '1': mycreate() break /* 创建 */

case '2': mydisplay()break /* 显示 */

case '3': mysearch() break /* 查询 */

case '4': mymodify() break /* 修改 */

case '5': myadd() break /* 添加 */

case '6': mydelete() break /* 删除 */

case '7': mysort() break /* 排序 */

case '0': break

default:printf("\n%c为非法选项!\n",choose)

}

if(choose=='0')

break

printf("\n要继续选择吗(Y/N)?\n")

do

{

yes_no=getch()

}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n')

//system("cls")

}while(yes_no!='N'||yes_no!='n')

}

void myprint() /* 显示菜单界面 */

{

printf("\n\n\n\n\n\n\n\n")

printf(" |----------------------------|\n")

printf(" | 请输入选项编号(0-7): |\n")

printf(" |----------------------------|\n") printf(" | 1--创建信息管理系统

|\n")

printf(" | 2--显示信息管理系统 |\n")

printf(" | 3--查询信息管理系统 |\n")

printf(" | 4--修改信息管理系统 |\n")

printf(" | 5--添加信息管理系统 |\n")

printf(" | 6--删除信息管理系统 |\n")

printf(" | 7--排序信息管理系统 |\n")

printf(" | 0--退出 |\n")

printf(" |----------------------------|\n")

}

/* 定义创建信息管理系统的函数 */

void mycreate()

{

int i=1

struct student temp

FILE *fp

fp=fopen("f:\\shuju.dat","w")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

printf("\n 请输入第1个记录:\n") printf(" 学号

(用#结束输入):")

do

{

gets(temp.num)

}while(strcmp(temp.num,"")==0)

printf(" 姓名(用#结束输入):")

gets(temp.name)

printf(" 电话号码(用#结束输入):")

gets(temp.tel)

while(temp.num[0]!='#'&&temp.name[0]!='#'&&temp.tel[0]!='#')

{

fprintf(fp,"%23s%15s%15s\n",temp.num,temp.name,temp.tel)

i++

printf("\n 请输入第%d个记录:\n",i)

printf(" 学号(用#结束输入):")

do

{

gets(temp.num)

}while(strcmp(temp.num,"")==0)

printf(" 姓名(用#结束输入):")

gets(temp.name)

printf(" 电话号码(用#结束输入):")

gets(temp.tel)

}

fclose(fp)

}

/* 定义显示信息管理系统的函数 */

void mydisplay()

{

int n=0

struct student temp

FILE *fp

fp=fopen("f:\\shuju.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

//clrscr()

//system("cls")

printf(" 学号 姓名 电话号码\n")

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel)

printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel)

n++

}

if(n==0)

printf("\n 文件中无记录!\n")

else

printf("\n 文件中共有%d个记录!\n",n)

fclose(fp)

}

/* 定义查询信息管理系统的函数 */

void mysearch()

{

char c

FILE *fp

fp=fopen("f:\\shuju.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

printf("\n 按学号查询(h),还是按姓名查询(m)?")

c=getch()

if(c=='h'||c=='H')

sch_num(fp) /* 按学号查询 */

if(c=='m'||c=='M')

sch_name(fp) /* 按姓名查询 */

else

printf("\n 非法字符!\n")

fclose(fp)

}

/* 定义按学号查询信息管理系统的函数 */

void sch_num(FILE *fp)

{

int flag=0,n=0

char tempnum[10]

struct student temp

printf("\n 请输入要查询记录的学号:")

gets(tempnum)

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel)

if(strcmp(tempnum,temp.num)==0)

{

if(flag==0)

printf(" 学号 姓名 电话号码\n")

printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel)

flag=1

}

n++

}

if(n==0)

printf("\n 文件中无记录!\n")

else

if(flag==0)

printf("\n 文件中无此人!\n")

}

/* 定义按姓名查询信息管理系统的函数 */

void sch_name(FILE *fp)

{

int flag=0,n=0

char tempname[10]

struct student temp

printf("\n 请输入要查询记录的姓名:")

gets(tempname)

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel)

if(strcmp(tempname,temp.name)==0)

{

if(flag==0)

printf(" 学号 姓名 电话号码\n")

printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel)

flag=1

}

n++

}

if(n==0)

printf("\n 文件中无记录!\n")

else

if(flag==0)

printf("\n 文件中无此人!\n")

}

/* 定义修改信息管理系统的函数 */

void mymodify()

{

char c

int n=0

struct student *find,temp,record[100],*p/* 最多100个记录 */

FILE *fp

fp=fopen("f:\\shuju.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

if(n==0)

{

printf("\n 文件中无记录!\n")

return

}

printf("\n 请输入要修改记录的学号:")

gets(temp.num)

for(p=recordp<record+np++)

if(strcmp(temp.num,p->num)==0)

{

find=p/* find记住修改记录的位置 */

break

}

if(p==record+n)

{

printf("\n 无此人!\n")

return

}

do

{

printf("\n 请输入正确的学号:")

do

{

gets(temp.num)

}while(strcmp(temp.num,"")==0)

printf(" 请输入正确的姓名:")

gets(temp.name)

printf(" 请输入正确的电话号码:")

gets(temp.tel)

for(p=recordp<record+np++)

if((strcmp(temp.num,p->num)==0)&&(p!=find))

{

printf("\n 学号重复,要重新输入吗(Y/N)?")

do

{

c=getch()

}while(c!='Y'&&c!='y'&&c!='N'&&c!='n')

putchar('\n')

break

}

if(p==record+n)

{

*find=temp /* find指向需要修改记录的位置 */

break

}

}while(c=='Y'||c=='y')

fp=fopen("f:\\shuju.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+np++)

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

fclose(fp)

}

/* 定义添加信息管理系统的函数 */

void myadd()

{

char c

int n=0

struct student temp,record[N],*p

FILE *fp

fp=fopen("f:\\shuju.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

do

{

printf("\n 请输入新记录的学号:")

do

{

gets(temp.num)

}while(strcmp(temp.num,"")==0)

printf(" 请输入新记录的姓名:")

gets(temp.name)

printf(" 请输入新记录的电话号码:")

gets(temp.tel)

for(p=recordp<record+np++)

if(strcmp(temp.num,p->num)==0)

{

printf("\n 学号重复,要重新输入吗(Y/N)?")

do

{

c=getch()

}while(c!='Y'&&c!='y'&&c!='N'&&c!='n')

putchar('\n')

break

}

if(p==record+n)

{

*p=temp

break

}

}while(c=='Y'||c=='y')

fp=fopen("f:\\shuju.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+n+1p++)

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

fclose(fp)

}

/* 定义删除信息管理系统的函数 */

void mydelete()

{

char c

FILE *fp

fp=fopen("f:\\shuju.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

printf("\n 按学号删除(h),还是按姓名删除(m)?")

c=getch()

if(c=='h'||c=='H')

del_num(fp) /* 按学号删除 */

if(c=='m'||c=='M')

del_name(fp) /* 按姓名删 */

else

printf("\n 非法字符!\n")

fclose(fp)

}

/* 定义按学号删除信息管理系统的函数 */

void del_num(FILE *fp)

{

int n=0

char tempnum[10]

struct student record[N],*p,*k

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

printf("\n 请输入要删除记录的学号:")

gets(tempnum)

for(k=recordk<record+nk++)

if(strcmp(tempnum,k->num)==0)

break /* 找到要删记录结束循环 */

if(k<record+n) /* 提前结束循环,说明找到人 */

for(p=kp<k+n-1p++) /* 向左移一位,相当于删除记录 */

*p=*(p+1)

else

printf("\n 无此人!\n")

fp=fopen("f:\\shuju.dat","w")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+n-1p++)

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

}

/* 定义按姓名删除信息管理系统的函数 */

void del_name(FILE *fp)

{

int n=0

char tempname[10]

struct student record[N],*p,*k

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

printf("\n 请输入要删除记录的姓名:")

gets(tempname)

for(k=recordk<record+nk++)

if(strcmp(tempname,k->name)==0)

break /* 找到要删记录结束循环 */

if(k<record+n) /* 提前结束循环,说明找到人 */

for(p=kp<k+n-1p++) /* 向左移一位,相当于删除记录 */

*p=*(p+1)

else

printf("\n 无此人!\n")

fp=fopen("f:\\shuju.dat","w")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+n-1p++)

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

}

/* 定义排序信息管理系统的函数 */

void mysort()

{

char c

FILE *fp

fp=fopen("f:\\shuju.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

fclose(fp)

printf("\n 按学号排序(h),还是按姓名排序(m)?")

c=getch()

if(c=='h'||c=='H')

sort_num() /* 按学号排序 */

if(c=='m'||c=='M')

sort_name() /* 按姓名排序 */

else

printf("\n 非法字符!\n")

}

/* 定义按学号排序信息管理系统的函数 */

void sort_num()

{

int i,j,k,n=0

char c

struct student record[N],*p,temp

FILE *fp

fp=fopen("f:\\shuju.dat","r")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

printf("\n 按升序(s),还是按降序(j)?")

c=getch()

if(c=='s'||c=='S')/* 按学号的升序排列 */

for(i=0i<n-1i++) /* 选择法排序 */

{

k=i

for(j=i+1j<nj++)

if(strcmp((p+k)->num,(p+j)->num)>0)

k=j

temp=*(p+k)

*(p+k)=*(p+i)

*(p+i)=temp

}

else

if(c=='j'||c=='J')/* 按学号的降序排列 */

for(i=0i<n-1i++) /* 选择法排序 */

{

k=i

for(j=i+1j<nj++)

if(strcmp((p+k)->num,(p+j)->num)<0)

k=j

temp=*(p+k)

*(p+k)=*(p+i)

*(p+i)=temp

}

else

{

printf("\n 非法字符!\n")

return

}

fp=fopen("f:\\shuju.dat","w")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+np++)

{

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

printf("%23s%15s%15s\n",p->num,p->name,p->tel)

}

fclose(fp)

}

/* 定义按姓名排序信息管理系统的函数 */

void sort_name()

{

int i,j,k,n=0

char c

struct student record[N],*p,temp

FILE *fp

fp=fopen("f:\\shuju.dat","r+")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

p=record

while(feof(fp)==0)

{

fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

p++

n++

}

fclose(fp)

printf("\n 按升序(s),还是按降序(j)?")

c=getch()

if(c=='s'||c=='S')/* 按姓名的升序排列 */

for(i=0i<n-1i++) /* 选择法排序 */

{

k=i

for(j=i+1j<nj++)

if(strcmp((p+k)->name,(p+j)->name)>0)

k=j

temp=*(p+k)

*(p+k)=*(p+i)

*(p+i)=temp

}

else

if(c=='j'||c=='J')/* 按姓名的降序排列 */

for(i=0i<n-1i++) /* 选择法排序 */

{

k=i

for(j=i+1j<nj++)

if(strcmp((p+k)->name,(p+j)->name)<0)

k=j

temp=*(p+k)

*(p+k)=*(p+i)

*(p+i)=temp

}

else

{

printf("\n 非法字符!\n")

return

}

fp=fopen("f:\\shuju.dat","w")

if(fp==NULL)

{

printf("\n 打开文件失败!\n")

return

}

for(p=recordp<record+np++)

fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel)

fclose(fp)


}

欢迎分享,转载请注明来源:

内存溢出

原文地址:

https://54852.com/yw/12027436.html
文件
(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
华南师大图书馆华南师大图书馆一级用户组
电脑下应用用哪个软件好?
上一篇
2023-05-20
为什么编译没有错误,运行却有错误
2023-05-20

发表评论
请登录后评论...
登录
提交

    评论列表(0条)
保存
{label}{label}