标题:关于文件的。。运行结果不完全
只看楼主
mosquiyan
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2014-12-12
结帖率:85.71%
已结贴  问题点数:10 回复次数:3 
关于文件的。。运行结果不完全
/*P192-习题10-2.建立一个学生信息表,包含学号、姓名、性别、年龄,
编写程序实现学生信息的输入并保存功能和查询年龄小于等于输入值的功能,
如输入20,表示在学生信息中查找年龄小于等于20的学生信息,并显示在显示器上。*/
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
    int num;
    char name[20];
    char sex[20];
    int age;
}AGE;//定义年龄信息数据结构
void input(AGE *s)//输入一个年龄信息
{
    char temp[20];
    int i;
    printf("please input num:");
    gets(temp);
    s->num=atoi(temp);
    printf("\nplease input name:");
    gets(s->name);
    printf("\nplease input sex(female/male):");
    gets(s->sex);
    printf("\nplease input age:");
    gets(temp);
    s->age=atoi(temp);
}

void save(char *filename,AGE *s)//filename保存年龄的文件名,s年龄信息指针
{
    FILE *fp;
    if((fp=fopen(filename,"ab"))==NULL)//如果追加文件filename不存在
    {
        fp=fopen(filename,"wb");//新建文件filename
    }
    fwrite(s,sizeof(AGE),1,fp);//将年龄信息写入文件
    fclose(fp);   
}
 
AGE *query(char *filename,int standard,AGE *s)
{
    FILE *fp;
    if((fp=fopen(filename,"rb"))==NULL)//如果打开文件不存在
      return NULL;
      while(!feof(fp))//判断指针是否已经到达文件底部
      {
          fread(s,sizeof(AGE),1,fp);
          if((s->age)<=standard)
          {
          fclose(fp);
          return s;
        }
      }
      fclose(fp);//关闭文件
      return NULL;
}

main()
{
    char ch;
    char filename[80];
    int standard;
    AGE a,*sp=&a;
    printf("\nplease input operation's filename:");
    gets(filename);
    printf("\ninput data now?(y/n):");
    ch=getchar();
    getchar();
    while(ch=='y'||ch=='Y')
    {
        input(sp);
        save(filename,sp);
        printf("\ncontinue(y/n):");
        ch=getchar();
        getchar();   
    }
    printf("please input standard of query:");
    scanf("%d",&standard);
    if(query(filename,standard,sp)!=NULL)
    printf("%d\t%s\t%s\t%d\n",sp->num,sp->name,sp->sex,sp->age);
    else
    printf("\nno result\n");
   
}
运行结果只能够输出一个合要求的信息。。感觉是query(filename,standard,sp)这里错了,求指教!谢谢
搜索更多相关主题的帖子: 编写程序 include please 显示器 信息 
2014-12-20 21:48
soulmate1023
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:256
专家分:831
注 册:2014-9-23
得分:5 
你的while循环写的有问题,给你改了,
提前定义了一个全局变量kflag=0;
程序代码:
AGE *query(char *filename,int standard,AGE *s)
{
    FILE *fp;
    if((fp=fopen(filename,"rb"))==NULL)//如果打开文件不存在
      return NULL;
      while(fread(s,sizeof(AGE),1,fp))//判断指针是否已经到达文件底部
      {
         // fread(s,sizeof(AGE),1,fp);
          if((s->age)<=standard)
          {printf("%d\t%s\t%s\t%d\n",s->num,s->name,s->sex,s->age);
          kflag=1;
         // fclose(fp);
         // return s;
        }
      }
      fclose(fp);//关闭文件
      return NULL;
}

int main()
{
    char ch;
    char filename[80];
    int standard;
    AGE a,*sp=&a;
    printf("\nplease input operation's filename:");
    gets(filename);
    printf("\ninput data now?(y/n):");
    ch=getchar();
    getchar();
    while(ch=='y'||ch=='Y')
    {
        input(sp);
        save(filename,sp);
        printf("\ncontinue(y/n):");
        ch=getchar();
        getchar();  

    }
    printf("please input standard of query:");
    scanf("%d",&standard);
    query(filename,standard,sp);
  if(kflag==1);
   else
  printf("\nno result\n");
   return 0;
}

2014-12-20 22:55
mosquiyan
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2014-12-12
得分:0 
谢谢!为什么要这样子改呀?if(kflag==1);下面为什么没有语句啦?
2014-12-21 12:00
lwei
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:197
专家分:369
注 册:2005-5-4
得分:5 
回复 3楼 mosquiyan
脱了裤子放屁,多此一举呗。

2014-12-21 12:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-440183-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018575 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved