| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2862 人关注过本帖
标题:怎么用C语言向一个TXT文件中每输入一个结构体,然后自动换行
只看楼主 加入收藏
蜗牛学编程
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-6-17
结帖率:0
收藏
已结贴  问题点数:5 回复次数:3 
怎么用C语言向一个TXT文件中每输入一个结构体,然后自动换行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct record
{  
char name[20]; //姓名
char street[20]; //街道
char city[20]; //城市
char eip[20]; //邮编
char state[20]; //国家
}people[500];//500个记录,可修改
struct pnode
{
 record data;
};
typedef  pnode * linklist;
linklist l;//链表
int len=0;//链表长度
FILE *fp; //文件指针
void mainmenu();//主菜单
void searchmenu();//查询菜单
void enter();//添加新纪录
void search();//按条件搜索记录
void display();//显示全部记录
void load();//载入文件内容
void save();//写入文件
void del();//删除记录
void main() //主函数
{
 load();
 while (1)
  mainmenu(); //进入主菜单,有非法输入仍停留在主菜单
}


void load()//装载已有文件信息到内存(数组)中
{
 if((fp=fopen("通讯录信息.txt","rb"))==NULL) //以只读二进制(rb)的方式打开“通讯录信息.txt” 接着把返回值给fp 如果返回值时NULL说明文件打开失败了
 {
  printf("\n\t\t通讯录文件不存在");
  if ((fp=fopen("通讯录信息.txt","wb"))==NULL) //如果以只写、二进制(wb)的方式“通讯录信息.txt” 接着把返回值给fp 如果返回值时NULL说明文件打开失败了
  {
   printf("\n\t\t建立失败");
   exit(0);
  }
  else
  {
   printf("\n\t\t通讯录文件已建立");
   printf("\n\t\t按任意键进入主菜单");
   getch();
   return;
  }
 exit(0);
 }
 //读取文件功能部分
 fseek(fp,0,2); //移动文件的位置指针到文件的末尾
 if (ftell(fp)>0) //如果文件的长度大于0  表示文件中有数据
 {
  rewind(fp);//这是一个反绕函数,使得文件的位置指针定位在文件的开头
  for(
   len=0;
   !feof(fp)&&fread(&people[len],sizeof(struct record),1,fp);
   len++);//从文件中读取数据,并统计读出数据的个数,每次从文件中读取一个数据,一直读到文件的末尾
   fprintf(fp,"\n");
  printf("\n\t");//printf("\n\t");printf("\n\t");
  printf("\n\t\t文件读取成功");
  printf("\n\t");
  printf("\n\t\t按任意键返回主菜单");
  getch(); //文件中读取一个字符
  return;
 }
   printf("\n\t\t文件导入成功");
 printf("\n\t\t通讯录文件中无任何纪录");
 printf("\n\t\t按任意键返回主菜单");
 getch();
 return;
}



void mainmenu()//主菜单
{
 char ch;
 system("cls");
    printf("\n");printf("\n");printf("\n");
 printf("\n\t\t***********************************************");
 printf("\n\t\t**      欢 迎 进 入 通 讯 录 系 统           **");
 printf("\n\t\t**             1--新建联系人                 **");
 printf("\n\t\t**             2--查找联系人                 **");
 printf("\n\t\t**             3--删除联系人                 **");
 printf("\n\t\t**             4--保存联系人                 **");
 printf("\n\t\t**             5--退出程序                   **");
 printf("\n\t\t***********************************************");
 printf("\n\t\t\t请选择:");
 printf("%c ",ch=getch());
 switch (ch)
 {
 case '1':enter();break;
 case '2':searchmenu();break;
 case '3':del();break;
 case '4':save();break;
 case '5':exit(0);
 default:mainmenu();
 }
}
void enter()//添加新纪录
{
 printf("\n\t\t**************** 请输入学生信息 ****************\n");
 printf("\n\t\t姓名:");
 scanf("%s",&people[len].name);
 printf("\n\t\t街道:");
 scanf("%s",&people[len].street);
 printf("\n\t\t城市:");
 scanf("%s",&people[len].city);
 printf("\n\t\t邮编:");
 scanf("%s",&people[len].eip);
 printf("\n\t\t国家:");
 scanf("%s",&people[len].state);
 
 len++;
 printf("\n\t\t是否继续添加?(y/n):");
 if (getch()=='y')
  enter();
 return;
}
void searchmenu()//查询菜单
{
 char ch;
 system("cls");
 printf("\n\t\t************************************************");
 printf("\n\t\t**                 查询菜单                   **");
 printf("\n\t\t**              1--显示所有信息               **");
 printf("\n\t\t**              2--按姓名查询                 **");
 printf("\n\t\t**              3--返回主菜单                 **");
 printf("\n\t\t************************************************");
 printf("         \n\t\t    请选择:");
 printf("%c",ch=getch());
 switch (ch)
 {
 case '1':display();break;
 case '2':search();break;
 case '3':mainmenu();break;
 }
}
void search()
{   
 printf("\n\t\t***************** 按姓名查找 *******************");
 char name[20];
 printf("\n\t\t请输入姓名:");
 scanf("%s",name);
 printf(" 查询到的信息:\n");
 printf(" %-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");//格式控制输出
 printf(" -----------------------------------------------------------------------------\n");
  for (int i=0;i<len;i++)
  {  
   if(strcmp(name,people[i].name)==0)//如果people[i].name和name相同?
    printf(" %-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);
  // if (i+1<len) continue;//重名纪录再检索
  }
 printf(" -----------------------------------------------------------------------------\n");
 printf("\n\t\t按任意键返回查询菜单");
 getch();
 searchmenu();  
}
void display()//显示所有纪录
{
 int i;
 system("cls"); //执行控制台命令‘清屏’,就是cmd下的cls,清除所有显示信息
 if(len!=0)
 {
  printf("\n\t\t*************** 以下为通讯录所有信息************\n\n");
  printf(" %-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");
  printf(" -----------------------------------------------------------------------------\n");
  for (i=0;i<len;i++)
  {  
   printf(" %-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);
   if (i+1<len) continue;
  }
  printf(" -----------------------------------------------------------------------------\n");
 }
 else
  printf("\n\t\t通讯录中无任何纪录");
 printf("\n\t\t按任意键返回查询菜单:");
 getch();
 searchmenu();
}
void del() //删除纪录
{
 int a=0,i,j,findmark; //findmark为查找结果标志
 //int findmark=0,delmark=0;
    char name[20];
    printf("\n\t\t请输入要删除学生姓名:");
    scanf("%s",name);
 for (i=a;i<len;i++)
 {
  if (findmark=strcmp(people[i].name,name)==0) //找到一条符合条件的记录
  {
  //findmark++;
   printf("\n\t\t以下是您找到的一条符合记录:\n");
   printf(" %-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");
   printf(" -----------------------------------------------------------------------------\n");
   printf(" %-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);   printf(" -----------------------------------------------------------------------------\n");
   printf("\n\t\t是否删除?(y/n)");
   if (getch()=='y')
   {
    for (j=i;j<len-1;j++)
     people[j]=people[j+1];
    len--;
    i--;
  //delmark++;
    printf("\n\t\t删除成功");
    if((i+1)<len)
    {
     printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)"); //是否删除同名纪录
     if (getch()=='y')
     {
      a=i;
      continue; //删除上一条记录之后搜索是否有同名纪录
     }
    }
   } //endif
   if((i+1)<len)
   {
    printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)"); //不删前一条纪录,删当前纪录
    if (getch()=='y')
    {
     a=i;
     continue;
    }
   }
  } //endif
  else
   continue;
 } //endfor
 if(!findmark)//没有找到任何符合条件的记录
  printf("\n\t\t没有符合条件的记录!");
 printf("\n\t\t是否继续删除?(y/n)"); //无同名纪录,是否继续删除其他纪录
 if (getch()=='y')
  del(); //继续删除其他纪录
 save();
}
void save()//写入文件
{
 int i;
 if ((fp=fopen("通讯录信息.txt","wb"))==NULL)
 {
  printf("\n\t\t文件打开失败");
 }
 for (i=0;i<len;i++)
 {
  if (fwrite(&people[i],sizeof(struct record),1,fp)!=1)
   printf("\n\t\t写入文件错误!\n");
 }
 fclose(fp); //关闭文件指针
 printf("\n\t\t\t\t通讯录文件已保存\n\t\t\t\t按任意键继续...");
 getch();
 return;
}

搜索更多相关主题的帖子: record people search include display 
2015-06-17 21:27
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
你注释这么多 有啥用
没看明白你想问什么 你想知道什么 你想实现神马  你纠结的问题点在哪里

DO IT YOURSELF !
2015-06-18 08:14
情.难言ゝ
Rank: 3Rank: 3
来 自:安徽安庆
等 级:论坛游侠
威 望:1
帖 子:74
专家分:137
注 册:2013-9-8
收藏
得分:2 
用fcsanf() 里面加换行

树叶的离去,是风的追求、还是树的不挽留???
2015-06-18 08:30
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:2 
如果是自己写得,一定知道在哪加。

能编个毛线衣吗?
2015-06-18 08:50
快速回复:怎么用C语言向一个TXT文件中每输入一个结构体,然后自动换行
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021879 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved