高手帮我看看,为什么执行显示的时候会出现乱码?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 70
FILE *fp;
struct Student//定义一个通讯录结构体
{
char name[30];//学生姓名
char sex[10];//学生性别
char phone[20];//学生联系电话
char age[5];//学生年龄
char add[30];//学生地址
}stu;//定义学生的结构体变量为stu
//***********************************************
//录入信息
//***********************************************
void luru()
{
int i;
if((fp=fopen("通讯录.txt","ab"))==NULL)
{
printf("文件打开失败!");
exit(1);
}
else
//输入学生的数据,存放在数组stu中
for(i=0;i<N;i++)
{
printf("请输入学生姓名:");
scanf("%s",stu[i].name);
printf("请输入学生性别:");
scanf("%s",stu[i].sex);
printf("请输入学生电话:");
scanf("%s",stu[i].phone);
printf("请输入学生年龄:");
scanf("%s",stu[i].age);
printf("请输入学生地址:");
scanf("%s",stu[i].add);
}
//把数据转存到磁盘文件中
for(i=0;i<N;i++)
{
fprintf(fp,"学生姓名:%s\n\n学生性别:%s\n\n学生电话:%s\n\n学生年龄:%s\n\n学生地址:%s\n\n",stu[i].name,stu[i].sex,stu[i].phone,stu[i].age,stu[i].add);
}
fclose(fp);
//system("pause"); //网上搜的让程序暂停一段时间
//system("cls"); //清屏
//return(main());
}
//*********************************************************
//显示所有信息
//*********************************************************
void xianshi()
{
int i;
if((fp=fopen("通讯录.txt","rb"))==NULL)
{
printf("打开文件错误!");
exit(0);
}
for(i=0;i<N;i++)
{
fread(&stu[i],sizeof(struct Student),N,fp);
printf("%-10s %-10s %-10s %-10s %-10s",stu[i].name,stu[i].sex,stu[i].phone,stu[i].age,stu[i].add);
}
fclose(fp);
//system("pause"); //网上搜的让程序暂停一段时间
// system("cls"); //清屏
//return(main());
}
int main()
{
int a,i;
for(i=0;i<=39;i++)//循环输出五角星
printf("#");
printf("\n");
printf(" 欢迎进入学生通讯录管理系统\n");
printf("\n");
for(i=0;i<=39;i++)
printf("#");
printf("\n");
printf("\n");
printf("0.录入信息 |\n");
printf("1.显示所有信息 |\n");
printf("2.查询信息 |\n");
printf("3.修改 |\n");
printf("4.删除信息 |\n");
printf("5. 退出程序 |\n");
printf("\n");
printf("\n");
for(i=0;i<=39;i++)
printf("#");
printf("请选择你想要功能的序号,按回车确认:");
scanf("%d",&a);
switch(a)
{
case 0:;luru();break;
case 1:;xianshi();break;
case 2:;
case 3:;
case 4:;
case 5:;
}
} 乱码
[解决办法]
把你的写入和读出改了下,能正常运行
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 2
FILE *fp;
struct Student//定义一个通讯录结构体
{
char name[30];//学生姓名
char sex[10];//学生性别
char phone[20];//学生联系电话
char age[5];//学生年龄
char add[30];//学生地址
}stu[N];//定义学生的结构体变量为stu
void luru()
{
int i;
if((fp=fopen("通讯录.txt","ab"))==NULL)
{
printf("文件打开失败!");
exit(1);
}
else
for(i=0;i<N;i++)
{
printf("请输入学生姓名:");
scanf("%s",stu[i].name);
printf("请输入学生性别:");
scanf("%s",stu[i].sex);
printf("请输入学生电话:");
scanf("%s",stu[i].phone);
printf("请输入学生年龄:");
scanf("%s",stu[i].age);
printf("请输入学生地址:");
scanf("%s",stu[i].add);
}
/* for(i=0;i<N;i++)
{
fprintf(fp,"学生姓名:%s\n\n学生性别:%s\n\n学生电话:%s\n\n学生年龄:%s\n\n学生地址:%s\n\n",stu[i].name,stu[i].sex,stu[i].phone,stu[i].age,stu[i].add);
}*/
fwrite(&stu,sizeof(struct Student),N,fp);
fclose(fp);
}
void xianshi()
{
int i;
if((fp=fopen("通讯录.txt","rb"))==NULL)
{
printf("打开文件错误!");
exit(0);
}
fread(&stu,sizeof(struct Student),N,fp);
for(i=0;i<N;i++)
{
printf("%-10s %-10s %-10s %-10s %-10s\n",stu[i].name,stu[i].sex,stu[i].phone,stu[i].age,stu[i].add);
}
fclose(fp);
}
int main()
{
int a,i;
for(i=0;i<=39;i++)//循环输出五角星
printf("#");
printf("\n");
printf(" 欢迎进入学生通讯录管理系统\n");
printf("\n");
for(i=0;i<=39;i++)
printf("#");
printf("\n");
printf("\n");
printf("0.录入信息
[解决办法]
\n");
printf("1.显示所有信息
[解决办法]
\n");
printf("2.查询信息
------解决方案--------------------
\n");
printf("3.修改
[解决办法]
\n");
printf("4.删除信息
[解决办法]
\n");
printf("5. 退出程序
[解决办法]
\n");
printf("\n");
printf("\n");
for(i=0;i<=39;i++)
printf("#");
printf("请选择你想要功能的序号,按回车确认:");
scanf("%d",&a);
switch(a)
{
case 0:;luru();break;
case 1:;xianshi();break;
case 2:;
case 3:;
case 4:;
case 5:;
}
}
[解决办法]
改了一下你的录入和显示函数,可以正常显示。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 70
FILE *fp;
struct Student//定义一个通讯录结构体
{
char name[30];//学生姓名
char sex[10];//学生性别
char phone[20];//学生联系电话
char age[5];//学生年龄
char add[30];//学生地址
}stu[N];//定义学生的结构体变量为stu
void luru()
{
int i;
if((fp=fopen("tongxinlu.txt","ab"))==NULL)
{
printf("文件打开失败!");
exit(1);
}
else
{
for(i=0;i<N;i++)
{
printf("请输入学生姓名:");
scanf("%s",stu[i].name);
printf("请输入学生性别:");
scanf("%s",stu[i].sex);
printf("请输入学生电话:");
scanf("%s",stu[i].phone);
printf("请输入学生年龄:");
scanf("%s",stu[i].age);
printf("请输入学生地址:");
scanf("%s",stu[i].add);
}
}
for(i=0;i<N;i++)
{
fprintf(fp,"学生姓名:%s 学生性别:%s 学生电话:%s 学生年龄:%s 学生地址:%s\n",
stu[i].name,stu[i].sex,stu[i].phone,stu[i].age,stu[i].add);
}
fclose(fp);
}
void xianshi()
{
int i;
char buf[200];
if((fp=fopen("tongxinlu.txt","rb"))==NULL)
{
printf("打开文件错误!");
exit(0);
}
while(fgets(buf,sizeof(buf),fp))
printf("%s",buf);
fclose(fp);
}
int main()
{
int a,i;
for(i=0;i<=39;i++)//循环输出五角星
printf("#");
printf("\n");
printf(" 欢迎进入学生通讯录管理系统\n");
printf("\n");
for(i=0;i<=39;i++)
printf("#");
printf("\n");
printf("\n");
printf("0.录入信息
[解决办法]
\n");
printf("1.显示所有信息
[解决办法]
\n");
printf("2.查询信息
[解决办法]
\n");
printf("3.修改
[解决办法]
\n");
printf("4.删除信息
[解决办法]
\n");
printf("5. 退出程序
[解决办法]
\n");
printf("\n");
printf("\n");
for(i=0;i<=39;i++)
printf("#");
printf("\n请选择你想要功能的序号,按回车确认:");
scanf("%d",&a);
switch(a)
{
case 0:
luru();break;
case 1:
xianshi();break;
case 2:;
case 3:;
case 4:;
case 5:;
}
}