C语言文件录入问题

C语言文件录入问题,第1张

#include <stdio.h>

#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()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8150020.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存