在C语言中如何文件中的结构体数据打印出来,下面是我的程序,求大神帮忙看看,谢谢了~~
答案:3 悬赏:30 手机版
解决时间 2021-01-30 07:29
- 提问者网友:未信
- 2021-01-29 21:03
在C语言中如何文件中的结构体数据打印出来,下面是我的程序,求大神帮忙看看,谢谢了~~
最佳答案
- 五星知识达人网友:从此江山别
- 2021-01-29 21:19
问题在你从终端输入数据的时候,从终端输入的数据都保存在了缓存里,当你输入数据的时候你做了两个操作,一、输入数据(比如是 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();
>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();
全部回答
- 1楼网友:青灯有味
- 2021-01-29 23:19
#include
#include
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("文件打开失败! ");return;
}
for(;i<=num;i++)
fwrite(&work[i],sizeof(work),1,file);
fclose(file);
file = NULL;
}追问谢谢,可是不是这儿的问题啊,
#include
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("文件打开失败! ");return;
}
for(;i<=num;i++)
fwrite(&work[i],sizeof(work),1,file);
fclose(file);
file = NULL;
}追问谢谢,可是不是这儿的问题啊,
- 2楼网友:千夜
- 2021-01-29 22:34
fwrite(&work[i],sizeof(WORK),1,file); 这里应该有问题吧, 会写越界的。
应该是:fwrite(&work[i],sizeof(WORK[i]),1,file);
应该是:fwrite(&work[i],sizeof(WORK[i]),1,file);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯