C语言问题,求高手解答。。。。。。 40
#include<stdio.h>#include<stdlib.h>#include<string.h>intn=0,i;structxuesheng{charxueh...
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n=0,i;
struct xuesheng
{
char xuehao[20];
char xingming[20];
int sushehao;
int chuanghao;
char xingbie[5];
int nianling;
char zhuanye[20];
}st[39]; /*学生信息结构体定义*/
void open(n)
{
FILE *fp;
int i;
if((fp=fopen("F://wen.txt","rb"))==NULL)
{
exit(1);
}
fscanf(fp,"%d",&n);
for(i=0;i<n;i++)
fread(&st[i],sizeof(struct xuesheng),1,fp);
fclose(fp);
}
void save(int n)
{
FILE*fp;
int i;
if((fp=fopen("F://wen.txt","wb"))==NULL)
{
exit(1);
}
fprintf(fp,"%d",n);
for(i=0;i<n;i++)
{
fwrite(&st[i],sizeof(struct xuesheng),1,fp);
fprintf(fp,"\r\n");
}
fclose(fp);
}
void tianjia() /*录入学生信息模块*/
{
int ssh,ch;
int j;
char xz; /*选择系数定义*/
open();
do
{
printf("请输入学生信息:\n");
printf("请输入学生学号:");
scanf("%s",st[i].xuehao);
printf("\n请输入学生姓名:");
scanf("%s",st[i].xingming);
printf("\n请输入学生宿舍号:");
scanf("%d",&ssh);
st[i].sushehao=ssh;
printf("\n请输入新学生床号:");
scanf("%d",&ch);
st[i].chuanghao=ch;
printf("\n请输入学生性别:");
scanf("%s",st[i].xingbie);
printf("\n请输入学生年龄:");
scanf("%d",&st[i].nianling);
printf("\n请输入学生专业:");
scanf("%s",st[i].zhuanye); /*学生信息的输入*/
n++;
printf("\n是否继续1/0?"); /*判断是否继续输入*/
scanf("%d",&xz);
}while(xz);
save(n); /*返回主菜单*/
}
void caidan()
{
printf("====================欢迎使用学生宿舍管理系统===================");
printf("\n 1:添加学生信息\n");
printf(" 2:删除学生信息\n");
printf(" 3:查询学生信息\n");
printf(" 4:修改学生信息\n");
printf(" 5:退出系统\n");
}
void main()
{
int xuanze;
next:caidan();
printf("请输入需要进行的操作:\n");
scanf("%d",&xuanze);
switch(xuanze)
{
case 1:tianjia();break;
case 2:shanchu();break;
case 3:chaxun();break;
case 4:xiugai();break;
case 5:exit(0);
}
goto next;
}
为啥就只能保存最后一次输入的,而且文件里显示的数据还是特殊符号??? 展开
#include<stdlib.h>
#include<string.h>
int n=0,i;
struct xuesheng
{
char xuehao[20];
char xingming[20];
int sushehao;
int chuanghao;
char xingbie[5];
int nianling;
char zhuanye[20];
}st[39]; /*学生信息结构体定义*/
void open(n)
{
FILE *fp;
int i;
if((fp=fopen("F://wen.txt","rb"))==NULL)
{
exit(1);
}
fscanf(fp,"%d",&n);
for(i=0;i<n;i++)
fread(&st[i],sizeof(struct xuesheng),1,fp);
fclose(fp);
}
void save(int n)
{
FILE*fp;
int i;
if((fp=fopen("F://wen.txt","wb"))==NULL)
{
exit(1);
}
fprintf(fp,"%d",n);
for(i=0;i<n;i++)
{
fwrite(&st[i],sizeof(struct xuesheng),1,fp);
fprintf(fp,"\r\n");
}
fclose(fp);
}
void tianjia() /*录入学生信息模块*/
{
int ssh,ch;
int j;
char xz; /*选择系数定义*/
open();
do
{
printf("请输入学生信息:\n");
printf("请输入学生学号:");
scanf("%s",st[i].xuehao);
printf("\n请输入学生姓名:");
scanf("%s",st[i].xingming);
printf("\n请输入学生宿舍号:");
scanf("%d",&ssh);
st[i].sushehao=ssh;
printf("\n请输入新学生床号:");
scanf("%d",&ch);
st[i].chuanghao=ch;
printf("\n请输入学生性别:");
scanf("%s",st[i].xingbie);
printf("\n请输入学生年龄:");
scanf("%d",&st[i].nianling);
printf("\n请输入学生专业:");
scanf("%s",st[i].zhuanye); /*学生信息的输入*/
n++;
printf("\n是否继续1/0?"); /*判断是否继续输入*/
scanf("%d",&xz);
}while(xz);
save(n); /*返回主菜单*/
}
void caidan()
{
printf("====================欢迎使用学生宿舍管理系统===================");
printf("\n 1:添加学生信息\n");
printf(" 2:删除学生信息\n");
printf(" 3:查询学生信息\n");
printf(" 4:修改学生信息\n");
printf(" 5:退出系统\n");
}
void main()
{
int xuanze;
next:caidan();
printf("请输入需要进行的操作:\n");
scanf("%d",&xuanze);
switch(xuanze)
{
case 1:tianjia();break;
case 2:shanchu();break;
case 3:chaxun();break;
case 4:xiugai();break;
case 5:exit(0);
}
goto next;
}
为啥就只能保存最后一次输入的,而且文件里显示的数据还是特殊符号??? 展开
4个回答
展开全部
第一 文件写入方式在文件非空情况下应为“ab+”,a为追加写入。fp所指向的文件为空时,用“wb”写入,这要加个if语句判断是否为NULL
第二 既然是以‘b’的方式写文件 那么文件的后缀就应该改为.dat
第二 既然是以‘b’的方式写文件 那么文件的后缀就应该改为.dat
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你的学生信息始终存入st[i], 而i值在整个程序就没有改变过,所以后来录入的信息也放入了st[i]中了,最后只剩一个学生的信息。
数据以特殊符号存放是正常的,因为你采用的是二进制存入方式
数据以特殊符号存放是正常的,因为你采用的是二进制存入方式
追问
我保存换成"W"了,为啥还是保存的特殊符号呢?谢谢了!
追答
写数据到文件的语句是这个
fwrite(&st[i],sizeof(struct xuesheng),1,fp);
整型数据读出后会产生乱码。
不想产生乱码你可改成字符型存储
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你什么编译环境?程序能运行?
追问
能啊,VC++6.0
追答
void open(n)
不会吧,像这些定义你的编译器也能过?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询