在C语言中如何文件中的结构体数据打印出来,下面是我的程序,求大神帮忙看看,谢谢了~~

#include<stdio.h>#include<stdlib.h>intnum=1;structWORK{intid;charname[20];doublesalar... #include<stdio.h>
#include<stdlib.h>
int num=1;
struct WORK{
int id;
char name[20];
double salary;
};
struct WORK work[100];
void input(){
char ch;
while(1){
printf("请输入第%d个人的号码:",num);
scanf("%d",&work[num].id);
printf("请输入第%d个人的姓名:",num);
scanf("%s",work[num].name);
printf("请输入第%d个人的工资:",num);
scanf("%lf",&work[num].salary);
printf("是否继续输入(Y/N):");
getchar();
scanf("%c",&ch);
if(ch == 'N'||ch == 'n')break;
else if(ch == 'Y'||ch == 'y')
num++;continue;
}
}
void save(){
FILE* file = fopen("a.txt","wb");
if(!file){
printf("文件打开失败!\n");return;
}
int i=1;
for(;i<=num;i++)
fwrite(&work[i],sizeof(WORK),1,file);
fclose(file);
file = NULL;
}

int main(){
input();
save();
int j=1;
FILE *p_file = fopen("a.txt","r");
if(!p_file){
printf("文件打开失败!\n");exit(0);
for(;j<=num;j++){
fscanf(p_file,"%d",&work[j].id);
fscanf(p_file,"%s",work[j].name);
fscanf(p_file,"%lf",&work[j].salary);
}
fclose(p_file);
}
for(j=1;j<=num;j++)
{
printf("第%d个人的号码是:%d",&work[j].id);
printf("第%d个人的号码是:%s",work[j].name);
printf("第%d个人的号码是:%lf",&work[j].salary);
}
return 0;
}
展开
 我来答
cuitnba
推荐于2018-04-13 · 超过14用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:30.6万
展开全部
问题在你从终端输入数据的时候,从终端输入的数据都保存在了缓存里,当你输入数据的时候你做了两个操作,一、输入数据(比如是 9);二、按回车。这样一来你的缓存里其实有两个数据9和回车,所以当你第一个scanf的时候读的是9,第二个scanf的时候读的是回车(\n)。要避免这种情况有两种方法,最直接的是每次在你调用scanf之前清除缓存【fflush(stdin);】,第二种是每次scanf调用完之后调用一次getchar(),并且返回值可以不给任何变量。

>printf("请输入第%d个人的号码:",num);
>scanf("%d",&work[num].id);
=>
printf("请输入第%d个人的号码:",num);
fflush(stdin);
scanf("%d",&work[num].id);

>printf("请输入第%d个人的号码:",num);
>scanf("%d",&work[num].id);
=>
printf("请输入第%d个人的号码:",num);
scanf("%d",&work[num].id);
getchar();
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
匿名用户
推荐于2017-09-30
展开全部
#include<stdio.h>
#include<stdlib.h>
int num=1;
struct WORK{
int id;
char name[20];
double salary;
};
struct WORK work[100];
void input(){
char ch;
for(num=0;num<100;num++)
{
printf("请输入第%d个人的号码:",num);
scanf("%d",&work[num].id);
printf("请输入第%d个人的姓名:",num);
scanf("%s",work[num].name);
printf("请输入第%d个人的工资:",num);
scanf("%lf",&work[num].salary);
printf("是否继续输入(Y/N):");
getchar();
scanf("%c",&ch);
if(ch == 'N'||ch == 'n')break;
//else if(ch == 'Y'||ch == 'y')
//num++;continue;
}
}
void save(){
int i=1; //先定义
FILE* file = fopen("a.txt","wb");
if(!file){
printf("文件打开失败!\n");return;
}

for(;i<=num;i++)
fwrite(&work[i],sizeof(work),1,file);
fclose(file);
file = NULL;
}
追问
谢谢,可是不是这儿的问题啊,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MyBrand
2013-12-04 · 超过17用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:29.6万
展开全部
fwrite(&work[i],sizeof(WORK),1,file); 这里应该有问题吧, 会写越界的。
应该是:fwrite(&work[i],sizeof(WORK[i]),1,file);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式