#include <stdlib.h>
struct student
{
char student_name[100]
int student_number
int short_num
int long_num
int doc_num
}
void save(int length,student *stu)
{
FILE *fp
int j,i
fp=fopen("ceshi2121.txt","wt+")
if(fp==NULL)
{
printf("错误")
exit(1)
}
for(i=0i<lengthi++)
fprintf(fp,"姓名: %s 学号: %d 短号: %d 长号: %d 寝室号: %d\n",stu[i].student_name,stu[i].student_number,
stu[i].short_num,stu[i].long_num,stu[i].doc_num)
fclose(fp)
printf("信息已保存\n")
system("粗散模PAUSE")
}
int main()
{
int choice,x
int saveflag=1
FILE *fp
int length=0
student stu[1000]
fp=fopen("ceshi.txt","rb")
if(fp==NULL)
{
printf("岩缓掘做\nCan not open file!\n")
exit(0)
}
while(!feof(fp))
{
//if(fread(&stu[length],sizeof(struct student),1,fp)==1)
fscanf(fp,"%s%d%d%d%d",&stu[length].student_name,&stu[length].student_number,&stu[length].long_num,&stu[length].short_num,&stu[length].doc_num)
length++
}
save(length,stu)
printf("\n%d\n",length)
system("pause")
fclose(fp)
return 0
}
思路:
1、用变量接收输入。
2、读取文件内容到内存中(比如用链表保存)。
3、循环遍历内存数据,对比输入的值,存在相同则表示已存在。
下面代码是我写得演示:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <windows.h>
#define P "C:\\1.txt"
typedef struct stu_info
{
int sNum// 学号
char name[20]//姓名
struct stu_info *next
}SINFO
int insert2File(char path[])// 向清亏简文件末尾插入一条学生信息
SINFO * selectALLFILE(char path[])//只读模式打开文本,获取信息, 返回信息链表头节点(该函数单独调用的话,记得调用freeSINFOS释放内存)
int checkSN(SINFO sinfo,char path[])//检空首查路径下文件中,学号是否存在,存在返回1,否则返回0
int freeSINFOS(SINFO *sHead)//释放链表内存
void showSINFOS(SINFO *sHead)//打印链表信息
int main()
{
SINFO *sHead=NULL
while(1)
{
sHead=selectALLFILE(P)
showSINFOS(sHead)
insert2File(P)
free(sHead)
sHead=NULL
printf("按任意键继续录入。。。\n"),getchar()
system("cls")
}
return 0
}
void showSINFOS(SINFO *sHead)
{
printf("当前从文件加载到内存中的信息为:\n")
if(sHead &&sHead->next)
while(sHead->next)
{
printf("学号:%d 姓名:%s\n",sHead->next->sNum,sHead->next->name)
sHead=sHead->next
}
}
int insert2File(char path[])
{
SINFO sinfo
FILE *fp=NULL
if(!(fp=fopen(path,"at+")))return 0
printf("请输入要插入的学生信息:\n")
printf(" 学号:"),scanf("%d",&sinfo.sNum)
printf(" 姓名:"),scanf("%s",sinfo.name),getchar()
if(checkSN(sinfo,path))
{
printf("当前学号已存在!新增失败!\n")
return 0
}
fprintf(fp,"%d %s\n",sinfo.sNum,sinfo.name)
fclose(fp)
printf("新增信息插入成功!\n")
return 1
}
SINFO *selectALLFILE(char path[])//查询文件
{
SINFO *sHead=NULL,*sTail=NULL,*sNew=NULL,sTemp
FILE *fp=NULL
if(!(fp=fopen(path,"rt"))) return NULL
fseek(fp,0,SEEK_SET)
sHead=(SINFO *)malloc(sizeof(SINFO))
if(!sHead)return NULL
sHead->next=NULL
while(fscanf(fp,"%d %s\n",&sTemp.sNum,sTemp.name)!=-1)
{
sNew=(SINFO *)malloc(sizeof(SINFO))
if(!sNew)return NULL
sNew->next=NULL
sNew->sNum=sTemp.sNum
sprintf(sNew->name,"%s",sTemp.name)
if(!sHead->next)
答裤 sHead->next=sNew
else
sTail->next=sNew
sTail=sNew
}
fclose(fp)
return sHead
}
int checkSN(SINFO sinfo,char path[])//检查学号是否存在,存在返回1,否则返回0
{
SINFO *sHead=NULL
sHead=selectALLFILE(path)
if(!sHead) return 0
if(!sHead->next) {freeSINFOS(sHead)return 0}
while(sHead->next)
{
if(sinfo.sNum==sHead->next->sNum) return 1
sHead=sHead->next
}
freeSINFOS(sHead)
return 0
}
int freeSINFOS(SINFO *sHead)
{
SINFO *sTemp=NULL
if(!sHead)return 1
while(sHead->next)
{
sTemp=sHead->next->next
free(sHead->next)
sHead->next=sTemp
}
free(sHead)
return 1
}
#include<stdio.h>main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9}
int p[10]
int i,k,t
FILE *fp2
fp2=fopen("mark","r") //改明圆成fp2
fread(&p[1],sizeof(p),1,fp)//这里得改成这样
for(k=1k<=8k++)
for(i=1i<=9-ki++)
{
if(p[i]>p[i+1])
{t=p[i]p[i]=p[i+1]p[i+1]=t
t=a[i]a[i]=a[i+1]a[i+1]=t
}
}
printf("player marks list:")
for(i=1i<=9i++)
printf("肢桥 %d ",p[i])
printf("\n")
printf("player num.s list:"历槐猛)
for(i=1i<=9i++)
printf(" NO.%d ",a[i])
fclose(fp2)
getch()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)