鱼C论坛

 找回密码
 立即注册
查看: 2182|回复: 3

关于文件读取到结构体的问题

[复制链接]
发表于 2017-8-31 14:15:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就是感觉自己语法上没有问题,但是就是不能读取输出出来
  1. struct communicationMethod
  2. {
  3.         int num;
  4.         char type;
  5.         char name[20];
  6.         char telephone[20];
  7.         char email[40];
  8. }ComMtd[50];
复制代码
  1.         FILE *fp;
  2.         int fp_i=0;
  3.         fp = fopen("C:\\Users\\ljr\\Desktop\\addressbook\\phonebook.txt", "w+");
  4.     for(i=0;i<50;i++)
  5.     {
  6.         fscanf(fp,"%d %c %s %s %s\n",&ComMtd[i].num,&ComMtd[i].type,ComMtd[i].name,ComMtd[i].telephone,ComMtd[i].email);
  7.     }
复制代码


所有代码
  1. #include<stdlib.h>
  2. #include<string.h>
  3. #include<conio.h>
  4. #include<dos.h>
  5. #include<windows.h>
  6. #include<time.h>
  7. #include<stdio.h>

  8. struct communicationMethod
  9. {
  10.         int num;
  11.         char type;
  12.         char name[20];
  13.         char telephone[20];
  14.         char email[40];
  15. }ComMtd[50];

  16. void Show(int j)
  17. {
  18.         printf("\n编号:%d", ComMtd[j].num);
  19.         printf("\n联系人所属类别:%c", ComMtd[j].type);
  20.         printf("\n姓名:%s", ComMtd[j].name);
  21.         printf("\n电话:%s", ComMtd[j].telephone);
  22.         printf("\n电子邮箱:%s", ComMtd[j].email);
  23.         printf("\n\n");
  24. }
  25. void Append(int len)
  26. {
  27.         ComMtd[len].num = len;
  28.         printf("新增联系人序号为:%d",ComMtd[len].num);     
  29.         printf("\n请输入联系人分类,A表示办公类,B表示个人类,C表示商务类: ");      
  30.         scanf("%c", &ComMtd[len].type);       
  31.         printf("\n请输入姓名: ");      
  32.         scanf("%s", ComMtd[len].name);
  33.         printf("\n请输入联系人联系电话: ");         
  34.         scanf("%s", &ComMtd[len].telephone);
  35. }
  36. void Delete(int del_i,int len)
  37. {
  38.         int del_k;
  39.         printf("\n将删除序号为%d的联系人\n",del_i);         
  40.         for (del_k = del_i; del_k<len; del_k++)     /*插入位置后的元素顺序后移*/
  41.         {
  42.                 strcpy(ComMtd[del_k].name, ComMtd[del_k + 1].name);     /*交换元素内容*/
  43.                 ComMtd[del_k].type=ComMtd[del_k + 1].type;
  44.                 strcpy(ComMtd[del_k].telephone, ComMtd[del_k + 1].telephone);
  45.                 ComMtd[del_k].num = ComMtd[del_k + 1].num;
  46.                 strcpy(ComMtd[del_k].email, ComMtd[del_k + 1].email);
  47.         }
  48. }
  49. void Update(int upd_i,int len)
  50. {
  51.         int upd_j;
  52.         char upd_name[20],upd_type,upd_email[40],upd_tel[20];
  53.         printf("请输入要修改联系人资料类别:\n1为姓名,2为分类(A表示办公类,B表示个人类,C表示商务类),\n3为电话号码,4为电子邮箱,按其他键退出修改\n");
  54.         while (1){
  55.                 if (upd_j == 1){
  56.                         printf("请输入修改后姓名:");
  57.                         scanf("%s", upd_name);
  58.                         strcpy(ComMtd[upd_j].name, upd_name);
  59.                         printf("\n已将姓名修改为:%s\n", ComMtd[upd_j].name);
  60.                 }
  61.                 else if (upd_j == 2){
  62.                         printf("请输入修改后分类:");
  63.                         scanf("%c", upd_type);
  64.                         ComMtd[upd_j].type=upd_type;
  65.                         printf("\n已将分类修改为:%c\n", ComMtd[upd_j].type);
  66.                 }
  67.                 else if (upd_j == 3){
  68.                         printf("请输入修改后电话号码:");
  69.                         scanf("%s", upd_tel);
  70.                         strcpy(ComMtd[upd_j].telephone, upd_tel);
  71.                         printf("\n已将电话号码修改为:%s\n", ComMtd[upd_j].telephone);
  72.                 }
  73.                 else if (upd_j == 4){
  74.                         printf("请输入修改后电子邮箱:");
  75.                         scanf("%s", upd_email);
  76.                         strcpy(ComMtd[upd_j].email, upd_email);
  77.                         printf("\n已将电子邮箱修改为:%s\n", ComMtd[upd_j].email);
  78.                 }
  79.                 else break;
  80.         }
  81. }
  82. void Call(int cal_i)
  83. {
  84.         int cal_j;
  85.         for (cal_j = 0; ComMtd[cal_i].telephone[cal_j] != '\0'; cal_j++)
  86.         {
  87.                 printf("%c", ComMtd[cal_i].telephone[cal_j]);
  88.                 switch (ComMtd[cal_i].telephone[cal_j])
  89.                 {
  90.                         case 0:Beep(523, 500);
  91.                         case 1:Beep(578, 500);
  92.                         case 2:Beep(659, 500);
  93.                         case 3:Beep(698, 500);
  94.                         case 4:Beep(784, 500);
  95.                         case 5:Beep(880, 500);
  96.                         case 6:Beep(988, 500);
  97.                         case 7:Beep(1046, 500);
  98.                         case 8:Beep(1175, 500);
  99.                         case 9:Beep(1318, 500);
  100.                 }
  101.                 Sleep(2000);
  102.         }

  103. }
  104. int main()
  105. {
  106.        
  107.         int option,count=0,i;
  108.         char type;
  109.         int len=sizeof(ComMtd) / sizeof(ComMtd[0]);
  110.         int sho_i;
  111.         int sea_i;
  112.         int app_i;
  113.         int sav_i=0;
  114.         int del_i=0,del_j=1;
  115.         int upd_i = 0,upd_j=1;
  116.         int cal_i = 0,cal_j=1;
  117.         char delname[20],updname[20],calname[20];
  118.        
  119.         FILE *fp;
  120.         int fp_i=0;
  121.         fp = fopen("C:\\Users\\ljr\\Desktop\\addressbook\\phonebook.txt", "w+");
  122.     for(i=0;i<50;i++)
  123.     {
  124.         fscanf(fp,"%d %c %s %s %s\n",&ComMtd[i].num,&ComMtd[i].type,ComMtd[i].name,ComMtd[i].telephone,ComMtd[i].email);
  125.     }
  126.                
  127.         printf("                                欢迎使用通讯录\n" );
  128.         printf("=====================================================\n");
  129.         printf("                                按0退出通讯录\n");
  130.         printf("                                按1查看所有联系人\n");
  131.         printf("                                按2查找某一类联系人\n");
  132.         printf("                                按3添加联系人\n" );
  133.         printf("                                按4删除联系人\n");
  134.         printf("                                按5修改联系人\n");
  135.         printf("                                按6选择联系人拨号\n");
  136.         printf("                                按7保存修改后信息\n");
  137.         printf("=====================================================\n");
  138.         while (1)
  139.         {
  140.                 printf("\n\n请选择:\n");
  141.                 scanf("%d", &option);
  142.                 switch (option)
  143.                 {
  144.                         case 0:exit(0);
  145.                         case 1://查看所有联系人
  146.                         {
  147.                                 for(sho_i=0;sho_i<len;sho_i++)
  148.                                 {
  149.                                         Show(sho_i);
  150.                                 }
  151.                                 printf("\n\n所有联系人列出完毕。");
  152.                                 break;
  153.                         }
  154.                         case 2://查找联系人
  155.                         {       
  156.                                 printf("\n\n请输入要查找联系人的分类,A表示办公类,B表示个人类,C表示商务类");
  157.                                 scanf("%c", type);
  158.                                 for (sea_i = 0; sea_i <=len; sea_i++)
  159.                                 {
  160.                                         if (type == ComMtd[sea_i].type) Show(sea_i);
  161.                                 }
  162.                                 break;
  163.                         }
  164.                         case 3://添加联系人
  165.                         {
  166.                                 printf("进入添加界面,若继续添加请输入1,否则输入0\n");
  167.                                 while (len < 50)
  168.                                 {
  169.                                         Append(len);
  170.                                         len++;
  171.                                         scanf("%d", &app_i);
  172.                                         if (app_i== 0)break;
  173.                                 }
  174.                                 break;
  175.                         }
  176.                         case 4://删除联系人
  177.                         {
  178.                                 printf("请输入需删除联系人姓名:\n");
  179.                                 scanf("%s", delname);
  180.                                 while (1){
  181.                                         if (strcmp(delname, ComMtd[del_i].name) == 0) break;
  182.                                         else if (del_i<=len)del_i++;
  183.                                         else {
  184.                                                 printf("该联系人不存在!");
  185.                                                 del_j = 0;
  186.                                                 break;
  187.                                         }
  188.                                 }
  189.                                 if (del_j != 0) Delete(del_i,len);
  190.                                 break;
  191.                         }
  192.                         case 5://修改联系人
  193.                         {
  194.                                 printf("请输入要修改联系人的姓名:\n");
  195.                                 scanf("%s", delname);
  196.                                 while (1){
  197.                                         if (strcmp(delname, ComMtd[upd_i].name) == 0) break;
  198.                                         else if (upd_i <= len)upd_i++;
  199.                                         else {
  200.                                                 printf("该联系人不存在!");
  201.                                                 upd_j = 0;
  202.                                                 break;
  203.                                         }
  204.                                 }
  205.                                 if (upd_j != 0) Update(upd_i,len);
  206.                                 break;
  207.                         }
  208.                         case 6://拨打号码
  209.                         {
  210.                                 printf("请输入要拨打的电话号码联系人姓名:");
  211.                                 scanf("%s", calname);
  212.                                 while (1){
  213.                                         if (strcmp(calname, ComMtd[cal_i].name) == 0) break;
  214.                                         else if (cal_i <= len)cal_i++;
  215.                                         else {
  216.                                                 printf("该联系人不存在!");
  217.                                                 cal_j = 0;
  218.                                                 break;
  219.                                         }
  220.                                 }
  221.                                 if (cal_j != 0) Call(cal_i);
  222.                                 break;
  223.                         }
  224.                         case 7://保存修改
  225.                         {
  226.                                    while (sav_i<len)
  227.                                 {
  228.                                         fprintf(fp,"%d %c %s %s %s",ComMtd[sav_i].num,ComMtd[sav_i].type,ComMtd[sav_i].name,ComMtd[sav_i].telephone,ComMtd[sav_i].email);  
  229.                                         sav_i++;
  230.                                 }
  231.                                 printf("修改保存完成");
  232.                                 break;

  233.                         }
  234.                         default:printf("\n输入有误请重新输入");
  235.                 }
  236.         }
  237. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-31 14:36:23 | 显示全部楼层
读写二进制文件,fread, fwrite 。这你代码里半个字眼都没看到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-31 15:09:30 | 显示全部楼层
ba21 发表于 2017-8-31 14:36
读写二进制文件,fread, fwrite 。这你代码里半个字眼都没看到

没看懂,我找的例子里面没有说这个.....能麻烦详细讲一下吗,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-31 18:04:44 | 显示全部楼层
wangjiexi 发表于 2017-8-31 15:09
没看懂,我找的例子里面没有说这个.....能麻烦详细讲一下吗,谢谢了

百度一下什么都 有了。用点心看
https://baike.baidu.com/item/fwrite/10942398?fr=aladdin

https://baike.baidu.com/item/fread/10942353?fr=aladdin
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 09:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表