| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 465 人关注过本帖
标题:求指点哪个地方错了。。。
只看楼主 加入收藏
Crazy_li
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-17
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:7 
求指点哪个地方错了。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NUM 200
 typedef struct
 {
  char driver[10];
  int car;
  char police[10];
  int num;
  int year;
  int month;
  int date;
 }Traffic;
 int my_menu()
 { int num;
  system("cls");
  printf("1. Input records\n");
  printf("2. Display all records\n");
  printf("3. Delete a record\n");
  printf("4. sort\n");
  printf("5. Insert a record\n");
  printf("0. Quit\n");
  printf("Please input the number(0~9):");
  scanf("%d",&num);
  if(num<0||num>9)
    {   
        printf("输入错误,请重新输入: \n");
        system("pause");
        my_menu();
        scanf("%d",&num);
    }
  return num;
 }
 int Input(Traffic trafList[],int n)
     { int word;
        do
         {
           printf("Please increase the record:\n");
           printf("请输入违章司机姓名、车牌号、开罚单警察、罚单号、罚单的年、月和日:\n");
           printf("违章司机:\t");
           scanf("%s",trafList[n].driver);
           printf("车牌号:\t");
           scanf("%d",&trafList[n].car);
           printf("开单警察:\t");
           scanf("%s",trafList[n].police);
           printf("罚单号:\t");
           scanf("%d",&trafList[n].num);
           printf("年:\t");
           scanf("%d",&trafList[n].year);
           printf("月:\t");
           scanf("%d",&trafList[n].month);
           printf("日:\t");
           scanf("%d",&trafList[n].date);
           printf("\n");
           n++;
           printf("是否继续添加记录(Yes(1)/No(0)):");
              scanf("%d",&word);
        }
        while(word==1);
        return n;
     }
 void Display(Traffic trafList[],int n)
 { int i;
   for(i=0;i<n;i++)
  {printf("违章司机\t%s\n",trafList[i].driver);
   printf("违章车牌\t%d\n",trafList[i].car);
   printf("开单警察\t%s\n",trafList[i].police);
   printf("罚单编号\t%d\n",trafList[i].num);
   printf("年\\月\\日\t%d\\%d\\%d\n",trafList[i].year,trafList[i].month,trafList[i].date);
   printf("\n\n");
   while((i+1)%10==0)printf("\f");  
  }
 }
 int Delete_a_record(Traffic trafList[],int nu,int n)
 {int i;
  for(i=nu;i<n-1;i++)
  trafList[i]=trafList[i+1];
  n--;
  return n;
 }
 int Delete(Traffic trafList[],int n,char *name)
 { int i,t,m;
   m=n;
   for(i=0;i<m;i++)
  {
      t=(int)strcmp(name,trafList[i].driver);
      if(t==0)
              {
               m=Delete_a_record(trafList,i,m);
               i--;
              }                              
  }
  if(i==m&&m==n)
  {
   printf("查无此人!!!\n");
   system("pause");
  }
  return m;
 }
 void Sort_by_Name(Traffic trafList[],int n)
 {  int i,j,k;
    Traffic Tr;
    for(i=0;i<n;i++)
     for(j=i+1;j<n;j++)
     {  
      if(strcmp(trafList[i].driver,trafList[j].driver)>0)
      {  
        Tr=trafList[i];
        trafList[i]=trafList[j];
        trafList[j]=Tr;
      }
     }
 }
 int Insert(Traffic trafList[],int n,Traffic s)
 { int i,j;
   printf("请输入插入的违章司机姓名:\t");
   scanf("%s",s.driver);
   printf("车牌号:\t");
   scanf("%d",&s.car);
   printf("开单警察:\t");
   scanf("%s",s.police);
   printf("罚单号:\t");
   scanf("%d",&s.num);
   printf("年:\t");
   scanf("%d",&s.year);
   printf("月:\t");
   scanf("%d",&s.month);
   printf("日:\t");
   scanf("%d",&s.date);
   printf("\n");
   for(i=0;i<n;i++)
     if(strcmp(trafList[i].driver,s.driver)>0)
     {
       for(j=n;j>i;j++)
        {
         trafList[j]=trafList[j-1];
        }
        trafList[i]=s;
       break;
     }
    n++;
    return n;
 }
  main()
 {FILE *fp;
  Traffic trafList[NUM],s;
  char Tlistname[20],Name[10],c;
  char *name=Name,*filename;
  int i,n=0,t;
  for(i=0;;i++)
  {
    switch(my_menu())
    {
    case(1):  {
                 n=Input(trafList,n);
                 break;
              }
    case(2):  {
               Display(trafList,n);
               system("pause");
               break;
              }
    case(3):  {
               printf("Please input the name to delete the record:");
               scanf("%s",name);
               n=Delete(trafList,n,name);
               break;
              }
    case(4):Sort_by_Name(trafList,n);
             break;
    case(5):n=Insert(trafList,n,s);
             break;
        case(0):{
            printf("正在关闭程序......\n");
            exit(0);
            }

    }
  }
 
 }
 



这个程序Insert函数 不能按预期插入数据。。请问这是什么原因?
搜索更多相关主题的帖子: include records system number police 
2014-04-19 18:01
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
收藏
得分:2 
通篇没有一句注释,看着有些难受。。
在Insert函数最后的两个for循环中,你不觉得里面的一个for循环陷入了死循环了么。
还有个,strcmp(trafList[i].driver,s.driver)>0 如果想要名字不重复的话(不知道是不是这个意思),我觉得只要比较的结果不等于0就可以了
以后这种类似操作,我建议你最好使用链表来操作。
2014-04-19 18:28
Crazy_li
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-17
收藏
得分:0 
问题出在Insert函数中 数据输入后 不会在显示菜单   。。问下 在这个程序的基础上 怎么改 能继续显示 my_menu 函数?
2014-04-19 18:28
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:3 
int Insert(Traffic trafList[],int n,Traffic s)
{ int i,j;
   printf("请输入插入的违章司机姓名:\t");
   scanf("%s",s.driver);
   printf("车牌号:\t");
   scanf("%d",&s.car);
   printf("开单警察:\t");
   scanf("%s",s.police);
   printf("罚单号:\t");
   scanf("%d",&s.num);
   printf("年:\t");
   scanf("%d",&s.year);
   printf("月:\t");
   scanf("%d",&s.month);
   printf("日:\t");
   scanf("%d",&s.date);
   printf("\n");
   for(i=0;i<n;i++)
     if(strcmp(trafList[i].driver,s.driver)>0)
     {
       for(j=n;j>i;j-- )    //<----------------这里应该是j--
        {
         trafList[j]=trafList[j-1];
        }
        trafList[i]=s;
       break;
     }
    n++;
    return n;
}
2014-04-19 18:30
Crazy_li
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-17
收藏
得分:0 
回复 2 楼 Andrew_Lee
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NUM 200

 typedef struct

 {
  char driver[10];
  int car;
  char police[10];
  int num;
  int year;
  int month;
  int date;

 }Traffic;           //定义结构体//
 int my_menu()

 { int num;
  system("cls");
  printf("1. Input records\n");
  printf("2. Display all records\n");
  printf("3. Delete a record\n");
  printf("4. sort\n");
  printf("5. Insert a record\n");
  printf("6. Query\n");
  printf("7. Add records from a Text File\n");
  printf("8. Write to a Text File\n");
  printf("9. research records\n");
  printf("0. Quit\n");
  printf("Please input the number(0~9):");
  scanf("%d",&num);
  if(num<0||num>9)     //如果输入数字不在0到9之间,则重新输入//
    {  
        printf("输入错误,请重新输入: \n");
        system("pause");
        my_menu();
        scanf("%d",&num);
    }
  return num;

 }

 int Input(Traffic trafList[],int n)  
     { int word;
        do
         {
           printf("Please increase the record:\n");
           printf("请输入违章司机姓名、车牌号、开罚单警察、罚单号、罚单的年、月和日:\n");
           printf("违章司机:\t");
           scanf("%s",trafList[n].driver);
           printf("车牌号:\t");
           scanf("%d",&trafList[n].car);
           printf("开单警察:\t");
           scanf("%s",trafList[n].police);
           printf("罚单号:\t");
           scanf("%d",&trafList[n].num);
           printf("年:\t");
           scanf("%d",&trafList[n].year);
           printf("月:\t");
           scanf("%d",&trafList[n].month);
           printf("日:\t");
           scanf("%d",&trafList[n].date);
           printf("\n");
           n++;
           printf("是否继续添加记录(Yes(1)/No(0)):");      
              scanf("%d",&word);
        }
        while(word==1);                    //判断是否继续输入数据//
        return n;
     }

 void Display(Traffic trafList[],int n)      

 { int i;
   for(i=0;i<n;i++)          //显示所有已记录的数据//
  {printf("违章司机\t%s\n",trafList[i].driver);
   printf("违章车牌\t%d\n",trafList[i].car);
   printf("开单警察\t%s\n",trafList[i].police);
   printf("罚单编号\t%d\n",trafList[i].num);
   printf("年\\月\\日\t%d\\%d\\%d\n",trafList[i].year,trafList[i].month,trafList[i].date);
   printf("\n\n");
   while((i+1)%10==0)printf("\f"); 
  }

 }

 int Delete_a_record(Traffic trafList[],int nu,int n)

 {int i;
  for(i=nu;i<n-1;i++)          
  trafList[i]=trafList[i+1];            //删除数据//
  n--;
  return n;

 }

 int Delete(Traffic trafList[],int n,char *name)

 { int i,t,m;
   m=n;
   for(i=0;i<m;i++)
  {
      t=(int)strcmp(name,trafList[i].driver);  //查找所要删除的数据的地址//
      if(t==0)
              {
               m=Delete_a_record(trafList,i,m);      //删除一个数据//
               i--;
              }                              
  }
  if(i==m&&m==n)    //如果记录中没有此人进行提示//
  {
   printf("查无此人!!!\n");
   system("pause");
  }
  return m;

 }

 void Sort_by_Name(Traffic trafList[],int n)

 {  int i,j,k;
    Traffic Tr;
    for(i=0;i<n;i++)        //采用选择法进行排序//
     for(j=i+1;j<n;j++)
     { 
      if(strcmp(trafList[i].driver,trafList[j].driver)>0)       //如果姓名i大于姓名j,则交换其结构体的内容//
      { 
        Tr=trafList[i];
        trafList[i]=trafList[j];
        trafList[j]=Tr;
      }
     }

 }

 int Insert(Traffic trafList[],int n,Traffic s)

 { int i,j;
   printf("请输入插入的违章司机姓名:\t");
   scanf("%s",s.driver);
   printf("车牌号:\t");
   scanf("%d",&s.car);
   printf("开单警察:\t");
   scanf("%s",s.police);
   printf("罚单号:\t");
   scanf("%d",&s.num);
   printf("年:\t");
   scanf("%d",&s.year);
   printf("月:\t");
   scanf("%d",&s.month);
   printf("日:\t");
   scanf("%d",&s.date);
   printf("\n");
   for(i=0;i<n;i++)
     if(strcmp(trafList[i].driver,s.driver)>0)      //如果原列表中的姓名大于插入的数据,则进行插入//
     {
       for(j=n;j>i;j++)
        {
         trafList[j]=trafList[j-1];
        }
        trafList[i]=s;
     }
    n++;
    return n;

 }

 int Query(Traffic trafList[],int n,char *name)

 {


 }

 int AddfromText(Traffic trafList[],int n,char *filename)

 {


 }

 void WritetoText(Traffic trafList[],int n,char *filename)

 {

 

 }

 void Research()

 {
  

 }

 main()

 {FILE *fp;                    //定义文件名//
  Traffic trafList[NUM],s;
  char Tlistname[20],Name[10],c;
  char *name=Name,*filename;
  int i,n=0,t;
  for(i=0;;i++)
  {
    switch(my_menu())      //进入菜单,进行选择//
    {
    case(1):  {
                 n=Input(trafList,n);    //输入数据//
                 break;
              }
    case(2):  {
               Display(trafList,n);     //显示所有数据//
               system("pause");
               break;
              }
    case(3):  {
               printf("Please input the name to delete the record:");
               scanf("%s",name);
               n=Delete(trafList,n,name);    //删除特定姓名的数据//
               break;
              }
    case(4):Sort_by_Name(trafList,n);        //按照姓名进行数据排序//
             break;
    case(5):n=Insert(trafList,n,s);          //插入一个新数据//
             break;
    case(6):Query(trafList,n,name);          //查询已有的数据//
             break;
    case(7):AddfromText(trafList,n,filename);    
             break;
    case(8):WritetoText(trafList,n,filename);
             break;
    case(9):Research();
             break;
    case(0):{
            printf("正在关闭程序......\n");
            exit(0);
            }

    }
  }


 }
大神 这个是我加了文字后的程序  。。。表示您之前说的还是没理解。。
2014-04-19 18:31
Crazy_li
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-17
收藏
得分:0 
回复 4 楼 ying8501
谢谢了。。明白了。。我犯2了。。我现在还不会调试。。看错误都是改改代码在运行着找错误的。。好难受。。
2014-04-19 18:33
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
都是高手
2014-04-19 18:43
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
收藏
得分:0 
回复 5 楼 Crazy_li
卧槽,可不要这么说额,我可不是什么大神,我只是个半路出家的。
2014-04-19 18:43
快速回复:求指点哪个地方错了。。。
数据加载中...
 
   



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

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