关于文件读取到结构体的问题
就是感觉自己语法上没有问题,但是就是不能读取输出出来struct communicationMethod
{
int num;
char type;
char name;
char telephone;
char email;
}ComMtd;
FILE *fp;
int fp_i=0;
fp = fopen("C:\\Users\\ljr\\Desktop\\addressbook\\phonebook.txt", "w+");
for(i=0;i<50;i++)
{
fscanf(fp,"%d %c %s %s %s\n",&ComMtd.num,&ComMtd.type,ComMtd.name,ComMtd.telephone,ComMtd.email);
}
所有代码
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<dos.h>
#include<windows.h>
#include<time.h>
#include<stdio.h>
struct communicationMethod
{
int num;
char type;
char name;
char telephone;
char email;
}ComMtd;
void Show(int j)
{
printf("\n编号:%d", ComMtd.num);
printf("\n联系人所属类别:%c", ComMtd.type);
printf("\n姓名:%s", ComMtd.name);
printf("\n电话:%s", ComMtd.telephone);
printf("\n电子邮箱:%s", ComMtd.email);
printf("\n\n");
}
void Append(int len)
{
ComMtd.num = len;
printf("新增联系人序号为:%d",ComMtd.num);
printf("\n请输入联系人分类,A表示办公类,B表示个人类,C表示商务类: ");
scanf("%c", &ComMtd.type);
printf("\n请输入姓名: ");
scanf("%s", ComMtd.name);
printf("\n请输入联系人联系电话: ");
scanf("%s", &ComMtd.telephone);
}
void Delete(int del_i,int len)
{
int del_k;
printf("\n将删除序号为%d的联系人\n",del_i);
for (del_k = del_i; del_k<len; del_k++) /*插入位置后的元素顺序后移*/
{
strcpy(ComMtd.name, ComMtd.name); /*交换元素内容*/
ComMtd.type=ComMtd.type;
strcpy(ComMtd.telephone, ComMtd.telephone);
ComMtd.num = ComMtd.num;
strcpy(ComMtd.email, ComMtd.email);
}
}
void Update(int upd_i,int len)
{
int upd_j;
char upd_name,upd_type,upd_email,upd_tel;
printf("请输入要修改联系人资料类别:\n1为姓名,2为分类(A表示办公类,B表示个人类,C表示商务类),\n3为电话号码,4为电子邮箱,按其他键退出修改\n");
while (1){
if (upd_j == 1){
printf("请输入修改后姓名:");
scanf("%s", upd_name);
strcpy(ComMtd.name, upd_name);
printf("\n已将姓名修改为:%s\n", ComMtd.name);
}
else if (upd_j == 2){
printf("请输入修改后分类:");
scanf("%c", upd_type);
ComMtd.type=upd_type;
printf("\n已将分类修改为:%c\n", ComMtd.type);
}
else if (upd_j == 3){
printf("请输入修改后电话号码:");
scanf("%s", upd_tel);
strcpy(ComMtd.telephone, upd_tel);
printf("\n已将电话号码修改为:%s\n", ComMtd.telephone);
}
else if (upd_j == 4){
printf("请输入修改后电子邮箱:");
scanf("%s", upd_email);
strcpy(ComMtd.email, upd_email);
printf("\n已将电子邮箱修改为:%s\n", ComMtd.email);
}
else break;
}
}
void Call(int cal_i)
{
int cal_j;
for (cal_j = 0; ComMtd.telephone != '\0'; cal_j++)
{
printf("%c", ComMtd.telephone);
switch (ComMtd.telephone)
{
case 0:Beep(523, 500);
case 1:Beep(578, 500);
case 2:Beep(659, 500);
case 3:Beep(698, 500);
case 4:Beep(784, 500);
case 5:Beep(880, 500);
case 6:Beep(988, 500);
case 7:Beep(1046, 500);
case 8:Beep(1175, 500);
case 9:Beep(1318, 500);
}
Sleep(2000);
}
}
int main()
{
int option,count=0,i;
char type;
int len=sizeof(ComMtd) / sizeof(ComMtd);
int sho_i;
int sea_i;
int app_i;
int sav_i=0;
int del_i=0,del_j=1;
int upd_i = 0,upd_j=1;
int cal_i = 0,cal_j=1;
char delname,updname,calname;
FILE *fp;
int fp_i=0;
fp = fopen("C:\\Users\\ljr\\Desktop\\addressbook\\phonebook.txt", "w+");
for(i=0;i<50;i++)
{
fscanf(fp,"%d %c %s %s %s\n",&ComMtd.num,&ComMtd.type,ComMtd.name,ComMtd.telephone,ComMtd.email);
}
printf(" 欢迎使用通讯录\n" );
printf("=====================================================\n");
printf(" 按0退出通讯录\n");
printf(" 按1查看所有联系人\n");
printf(" 按2查找某一类联系人\n");
printf(" 按3添加联系人\n" );
printf(" 按4删除联系人\n");
printf(" 按5修改联系人\n");
printf(" 按6选择联系人拨号\n");
printf(" 按7保存修改后信息\n");
printf("=====================================================\n");
while (1)
{
printf("\n\n请选择:\n");
scanf("%d", &option);
switch (option)
{
case 0:exit(0);
case 1://查看所有联系人
{
for(sho_i=0;sho_i<len;sho_i++)
{
Show(sho_i);
}
printf("\n\n所有联系人列出完毕。");
break;
}
case 2://查找联系人
{
printf("\n\n请输入要查找联系人的分类,A表示办公类,B表示个人类,C表示商务类");
scanf("%c", type);
for (sea_i = 0; sea_i <=len; sea_i++)
{
if (type == ComMtd.type) Show(sea_i);
}
break;
}
case 3://添加联系人
{
printf("进入添加界面,若继续添加请输入1,否则输入0\n");
while (len < 50)
{
Append(len);
len++;
scanf("%d", &app_i);
if (app_i== 0)break;
}
break;
}
case 4://删除联系人
{
printf("请输入需删除联系人姓名:\n");
scanf("%s", delname);
while (1){
if (strcmp(delname, ComMtd.name) == 0) break;
else if (del_i<=len)del_i++;
else {
printf("该联系人不存在!");
del_j = 0;
break;
}
}
if (del_j != 0) Delete(del_i,len);
break;
}
case 5://修改联系人
{
printf("请输入要修改联系人的姓名:\n");
scanf("%s", delname);
while (1){
if (strcmp(delname, ComMtd.name) == 0) break;
else if (upd_i <= len)upd_i++;
else {
printf("该联系人不存在!");
upd_j = 0;
break;
}
}
if (upd_j != 0) Update(upd_i,len);
break;
}
case 6://拨打号码
{
printf("请输入要拨打的电话号码联系人姓名:");
scanf("%s", calname);
while (1){
if (strcmp(calname, ComMtd.name) == 0) break;
else if (cal_i <= len)cal_i++;
else {
printf("该联系人不存在!");
cal_j = 0;
break;
}
}
if (cal_j != 0) Call(cal_i);
break;
}
case 7://保存修改
{
while (sav_i<len)
{
fprintf(fp,"%d %c %s %s %s",ComMtd.num,ComMtd.type,ComMtd.name,ComMtd.telephone,ComMtd.email);
sav_i++;
}
printf("修改保存完成");
break;
}
default:printf("\n输入有误请重新输入");
}
}
} 读写二进制文件,fread, fwrite 。这你代码里半个字眼都没看到{:10_247:} ba21 发表于 2017-8-31 14:36
读写二进制文件,fread, fwrite 。这你代码里半个字眼都没看到
没看懂,我找的例子里面没有说这个.....能麻烦详细讲一下吗,谢谢了 wangjiexi 发表于 2017-8-31 15:09
没看懂,我找的例子里面没有说这个.....能麻烦详细讲一下吗,谢谢了
百度一下什么都 有了。用点心看
https://baike.baidu.com/item/fwrite/10942398?fr=aladdin
https://baike.baidu.com/item/fread/10942353?fr=aladdin
页:
[1]