| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 254 人关注过本帖
标题:我的程序出错了,两个问题,一是读取的文件循环两次,还有就是查找文件直接 ...
只看楼主 加入收藏
Gavin小天
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-11-22
收藏
 问题点数:0 回复次数:3 
我的程序出错了,两个问题,一是读取的文件循环两次,还有就是查找文件直接崩溃
程序代码:
/*
        要实现的功能
            1、对疾病列表的读取
            2、对序号 id 症状和科室的查询
*/
# include <stdio.h>
#include<stdlib.h>
# include<conio.h>
# include<string.h>
struct Illness               /*声明疾病列表的数据结构体*/
{
    int number;                   //序号
    char id[10];                  //id编号
    char symptom[20];              //症状
    char department[20];           //科室
};
    struct Illness illness1[3000];
    void list();
    void read();
    void find();
    void find_number();
    void find_id();
    int n=-1;

 int main()

 {
    char ch;
    read();
    //int a;printf("%s",illness1[a].number);                     //       测试读取文件是否赋值到数组专用!!!!
    while(1)
    {
    system("cls");  /******清屏专用******/
     printf("          按‘1’查询信息\n          按‘2’输出所有信息\n          按‘0’结束\n");
    ch=getche();
     if(ch>'2'||ch<'0')
      {
            printf("\n\t\t输入有误,请按任意键返回重新选择(0-2)");
            getch();
            continue;
      } 
    switch(ch)
      {
                case '1':find();break;
                case '2':list();break;
                case '0':exit(0);
                default:printf("\n\t\t\t请重新选择(0-2)");break; 
      }
                getche();
    }
    return 0;

 }

 void list()
{
     int i;    //用做循环
     system("cls");    /******清屏专用******/     //需要stdlib.h头文件
     printf("\n\n\t\t\t  所有疾病列表如下\n");
     printf("\t\t\t========================\n\n");
     printf("%d%s%s%s","序号","id","症状","科室");
     i = 0;
     while(i < 2732)
     {
        i++;
        printf("%d",illness1[i].number);
        printf("%s",illness1[i].id);
        printf("%s",illness1[i].symptom);
        printf("%s",illness1[i].department);
        printf("\n");    
        getch();
        break;                                               
     }
     printf("按任意键返回主菜单……");
     getch();
     return; 
} 
void read()
{
    FILE *jb;
    if((jb=fopen("jibing.txt","r"))==NULL)
    {
          printf("\n\n\t疾病列表无法打开!");
          printf("\n\n\t按任意键进入主菜单......");
          getch();
          return; 
     }
     else
    {
        jb = fopen("jibing.txt","r");
        n++;
        while(fread(&illness1[n],sizeof(illness1[n]),3000,jb)==1)
        fclose(jb);
        printf("\n\n\t疾病列表读取完毕\n",n);
     }
}
void find()
{
    int i;
    printf("\n\t\t请选择(1-2)\n");
    printf("\t\t\t1.表示按序号查询\n");
    printf("\t\t\t2.表示按id编号查询\n");
    printf("\n\t\t你的选择是:");
    scanf("%d",&i);
    switch(i)
    {
        case 1:find_number();break;
      //  case 2:find_id();break; 
    }
    if(i !=1&&i !=2)
    {
        printf("\n\t\t输入有误,请按任意键返回重新选择(1-2)");
        getch();
    }
    getch();
}
void find_number()
{     
    int number;        
    int x;                         //循环变量
    printf("\t请输入序号:");  //提示信息
    scanf("%d",&number);     //从键盘读取字符串
    for(x=0;x<=n;x++)
   {
        if(strcmp(illness1[x].number,number)==0)//比较并找到
        {
            printf("\n该序号情况如下:\n");
            printf("=======================\n\n");
            printf("%-6d%-6s%-9s%-9s","序号","id","症状","科室");           
            printf("%-6d%-6s%-9s%-9s",illness1[x].number,illness1[x].id,illness1[x].symptom,illness1[x].department);
            getch();
            break;                                               
        }            
    }
} 
2014-11-22 23:25
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:0 
以下是引用Gavin小天在2014-11-22 23:25:44的发言:
/*
        要实现的功能
            1、对疾病列表的读取
            2、对序号 id 症状和科室的查询
*/
# include <stdio.h>
#include<stdlib.h>
# include<conio.h>
# include<string.h>
struct Illness               /*声明疾病列表的数据结构体*/
{
    int number;                   //序号
    char id[10];                  //id编号
    char symptom[20];              //症状
    char department[20];           //科室
};
    struct Illness illness1[3000];
    void list();
    void read();
    void find();
    void find_number();
    void find_id();
    int n=-1;
int main()
{
    char ch;
    read();
    //int a;printf("%s",illness1[a].number);                     //       测试读取文件是否赋值到数组专用!!!!
    while(1)
    {
    system("cls");  /******清屏专用******/
     printf("          按‘1’查询信息\n          按‘2’输出所有信息\n          按‘0’结束\n");
    ch=getche();
     if(ch>'2'||ch<'0')
      {
            printf("\n\t\t输入有误,请按任意键返回重新选择(0-2)");
            getch();
            continue;
      }
    switch(ch)
      {
                case '1':find();break;
                case '2':list();break;
                case '0':exit(0);
                default:printf("\n\t\t\t请重新选择(0-2)");break;
      }
                getche();
    }
    return 0;
}
void list()
{
     int i;    //用做循环
     system("cls");    /******清屏专用******/     //需要stdlib.h头文件
     printf("\n\n\t\t\t  所有疾病列表如下\n");
     printf("\t\t\t========================\n\n");
     printf("%d%s%s%s","序号","id","症状","科室");
     i = 0;
     while(i < 2732)
     {
        i++;
        printf("%d",illness1[i].number);
        printf("%s",illness1[i].id);
        printf("%s",illness1[i].symptom);
        printf("%s",illness1[i].department);
        printf("\n");   
        getch();
        break;                                               
     }
     printf("按任意键返回主菜单……");
     getch();
     return;
}
/*
**read()函数需要改的地方太多,所以重写一遍,对照着看吧
**你需要重点复习几个文件操作函数的用法
**void read()
**{
**    FILE *jb;
**    if((jb=fopen("jibing.txt","r"))==NULL)
**    {
**          printf("\n\n\t疾病列表无法打开!");
**          printf("\n\n\t按任意键进入主菜单......");
**          getch();
**         return;
**     }
**     fread(&illness1[n],sizeof(illness1[n]),1,jb);
**     fclose(jb);
**     printf("\n\n\t疾病列表读取完毕\n",n);
**}
*/
void read()
{
    FILE *jb;
    if((jb=fopen("jibing.txt","r"))==NULL)
    {
          printf("\n\n\t疾病列表无法打开!");
          printf("\n\n\t按任意键进入主菜单......");
          getch();
          return;
     }
     else
    {
        jb = fopen("jibing.txt","r");
        n++;
        while(fread(&illness1[n],sizeof(illness1[n]),3000,jb)==1)
        fclose(jb);
        printf("\n\n\t疾病列表读取完毕\n",n);
     }
}
void find()
{
    int i;
    printf("\n\t\t请选择(1-2)\n");
    printf("\t\t\t1.表示按序号查询\n");
    printf("\t\t\t2.表示按id编号查询\n");
    printf("\n\t\t你的选择是:");
    scanf("%d",&i);
    switch(i)
    {
        case 1:find_number();break;
      //  case 2:find_id();break;
    }
    if(i !=1&&i !=2)
    {
        printf("\n\t\t输入有误,请按任意键返回重新选择(1-2)");
        getch();
    }
    getch();
}
void find_number()
{     
    int number;        
    int x;                         //循环变量
    printf("\t请输入序号:");  //提示信息
    scanf("%d",&number);     //从键盘读取字符串
    for(x=0;x<=n;x++)
   {
        /*
        **strcmp()函数是用来比较字符串的
        **number好像被你声明为int了
        */
        if(strcmp(illness1[x].number,number)==0)//比较并找到
        {
            printf("\n该序号情况如下:\n");
            printf("=======================\n\n");
            printf("%-6d%-6s%-9s%-9s","序号","id","症状","科室");           
            printf("%-6d%-6s%-9s%-9s",illness1[x].number,illness1[x].id,illness1[x].symptom,illness1[x].department);
            getch();
            break;                                               
        }            
    }
}

只修改了两处,看注释……

[qq]949654600[/qq]
2014-11-23 10:01
Gavin小天
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-11-22
收藏
得分:0 
回复 2 楼 yahwei
那个read函数不能这样改,列表读取不出来
2014-11-23 11:04
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:0 
回复 3 楼 Gavin 小天
void read()
{
    FILE *jb;
    if((jb=fopen("jibing.txt","r"))==NULL)
    {
          printf("\n\n\t疾病列表无法打开!");
          printf("\n\n\t按任意键进入主菜单......");
          getch();
         return;
     }
     fread(illness1,sizeof(illness1[0]),3000,jb);
     fclose(jb);
     printf("\n\n\t疾病列表读取完毕\n",n);
}
嗯,没改好

[qq]949654600[/qq]
2014-11-23 15:05
快速回复:我的程序出错了,两个问题,一是读取的文件循环两次,还有就是查找文件 ...
数据加载中...
 
   



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

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