| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1109 人关注过本帖
标题:求有空的大神帮忙调试一下,在输入任何一个字母的时候就会出现死循环,问题 ...
只看楼主 加入收藏
计科1102
Rank: 1
等 级:新手上路
帖 子:56
专家分:9
注 册:2013-4-26
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:10 
求有空的大神帮忙调试一下,在输入任何一个字母的时候就会出现死循环,问题何在?
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <stdlib.h>
#include <ctime>
#define NULL 0

typedef struct Node    //定义每个结点的类型
{   int m;             //每个人所拥有的密码
    int n;            //每个人的位序
    struct Node *next;
}Node,*Linklist;

Linklist create(int z)  //生成z个结点的循环单链表,z为总人数
{   int i,mm;
    Linklist r,s,H=NULL;   
    for(i=1;i<=z;i++)
    {  printf("请输入NO.%d的密码=",i);
       scanf("%d",&mm);
       s=(Linklist)malloc(sizeof(Node));
       s->n=i;
       s->m=mm;
       if(H==NULL)      //从链表的第一个节点插入
       {  H=s;
          r=H;
       }
        else               //链表的其余节点插入
        {  r->next=s;
           r=s;      //r后移
        }
    }    //for结束
    r->next=H;    //生成循环单链表
    return H;
}
void search(Linklist H,int m0,int z)//用循环链表实现报数问题
{   int count=1;    //count为累计报数人数计数器
    int num=0;      //num为标记出列人数计数器
    Linklist pre,p;
    p=H;
    printf("出列的顺序为:");
    while(num<z)
    {  
        do{  count++;
             pre=p;
             p=p->next;
          }while(count<m0);
        pre->next=p->next;
        printf("%d  ",p->n);
        m0=p->m;
        free(p);
        p=pre->next;
        count=1;
       num++;
    }    //while结束
}

void clean()
{    int system(const char *string);
     int  inquiry;
     printf("若要清除上一次操作记录请选择(1.清屏/2.不清屏)...\n");
     scanf("%d",&inquiry);
     if(inquiry ==1)
     system("cls");
     
}
void time()
{   time_t timer ;/*时间*/
    struct tm *ptrtime;/*指向struct tm的指针*/
    timer = time( NULL ) ;/*调用time()函数获取当前时间*/
    ptrtime = localtime( &timer ) ;/*调用localtime()函数将获得的系统时间转化为指向struct tm的指针指向的结构体*/
    printf("\n系统时间: %s",asctime( ptrtime ) ) ;/*用asctime()将结构体转化为字符串输出*/
}
void  text()
{  int m0,z,i,k=1; //k用来阻止第一次进入程序清屏操作
   int choose;
   Linklist H;
   bool chooseFlag=false;
  while(1)
  {   if(k!=1)
  {clean();
  time();}
         k++;
     
      while(!chooseFlag)
      {   printf("           ============欢迎进入排序系统计设——约瑟夫环问题============\n");
          printf("                   *              1.输入约瑟夫环数据              *\n");
          printf("                   *              2.什么是约瑟夫环?               *\n");
          printf("                   *              3.退出系统                      *\n");
          printf("          ..............................................................\n");
          printf("请输入相应的数字进行选择: ");                       
          scanf("%d",&choose);
          for(i=1;i<=4;i++)
            {    if(choose==i)
                     { chooseFlag=true;
                       break;
                     }
                else chooseFlag=false;
            }
          if(!chooseFlag)
               printf("输入错误!\n");
      } //end  while(!chooseFlag)
      if(choose==1) //if 开始
      {   printf("请输入一个小于30的整数表示人数:");
          scanf("%d",&z);
           while(z>30||z<1)
           {   printf("超过最大输入人数! 请重新输入整数: ");
               scanf("%d",&z);
           }
           H=create(z);//函数调用
           printf("请输入初始密码m0: ");
           scanf("%d",&m0);//
           search(H,m0,z);
           printf("\n\n");         
           }
       else if(choose==2)   
       {   printf("\n约瑟夫环问题:设有n个人,其编号分别为1,2,3,…,n,安装编号顺序顺时针围坐一圈。选定一个正整数m,从第一个人开始顺时针报数,报到m时,则此人出列,然后从他的下一个人从1重新报数,依此类推,直到所有人全部出列为止,求出列的顺序。\n\n");
       }            
       else if(choose==3)
       {   printf("程序结束!\n");
           break;
       }
       else
       {   printf("错误!\n");
           
       }//end if
           chooseFlag=0;   
  }//end while(1)
}

void main()
{  time();
    text();
}
搜索更多相关主题的帖子: 密码 include create 
2013-05-10 22:34
计科1102
Rank: 1
等 级:新手上路
帖 子:56
专家分:9
注 册:2013-4-26
收藏
得分:0 
这是约瑟夫环的一个小程序,就是希望输入字母的时候不会出现死循环,求大神帮忙啊!我改了又改,结果还是不行!!
2013-05-10 22:36
飞黄腾达
Rank: 2
等 级:论坛游民
帖 子:46
专家分:27
注 册:2013-3-14
收藏
得分:10 
1.首先,你的time()函数与系统函数重名,改一下函数名
2.#define NULL 0不需要,NULL本身就表示0
3.true,false应定义#define true 1
4.bool chooseFlag=false;这点我也不清楚,我改成int就能用了
2013-05-11 23:27
计科1102
Rank: 1
等 级:新手上路
帖 子:56
专家分:9
注 册:2013-4-26
收藏
得分:0 
上面的函数可以编译出来的,只是经不起测试!!情况就像我说的,输入数字可以,不会有问题。就是输入字母的时候,就会出现死循环,我就不知道怎么改进完善它而已。还有望各路大神多指教!!
2013-05-13 13:40
飞黄腾达
Rank: 2
等 级:论坛游民
帖 子:46
专家分:27
注 册:2013-3-14
收藏
得分:0 
这不很简单嘛,把字符改一下就可以了
typedef struct Node    //定义每个结点的类型
{   char m;             //每个人所拥有的密码
    int n;            //每个人的位序
    struct Node *next;
}Node,*Linklist;
for(i=1;i<=z;i++)
    {  printf("请输入NO.%d的密码=",i);
       scanf("%c",&mm);
       getchar();
2013-05-13 23:36
计科1102
Rank: 1
等 级:新手上路
帖 子:56
专家分:9
注 册:2013-4-26
收藏
得分:0 
问题不是出现在那里,在下面的红色说明那里
void  text()
{  int m0,z,i,k=1; //k用来阻止第一次进入程序清屏操作
   int choose;
   Linklist H;
   char chooseFlag=false;
  while(1)
  {   if(k!=1)
  {clean();
  Time();}
         k++;
     
      while(!chooseFlag)
      {   printf("           ============欢迎进入排序系统计设——约瑟夫环问题============\n");
          printf("                   *              1.输入约瑟夫环数据              *\n");
          printf("                   *              2.什么是约瑟夫环?               *\n");
          printf("                   *              3.退出系统                      *\n");
          printf("          ..............................................................\n");
          printf("请输入相应的数字进行选择: ");   问题出现在这里!!!叫你输入相应的数字的时候,如果你输入的是字母,就会出现死循环了            
2013-05-14 00:33
cuijunchao
Rank: 5Rank: 5
来 自:湖南桂东
等 级:职业侠客
威 望:3
帖 子:132
专家分:386
注 册:2012-4-4
收藏
得分:10 
你输入字母当然是死循环了 ,字母的编码都大于4的,你只有输入数字了 ,
2013-05-14 12:13
cuijunchao
Rank: 5Rank: 5
来 自:湖南桂东
等 级:职业侠客
威 望:3
帖 子:132
专家分:386
注 册:2012-4-4
收藏
得分:0 
只有输入为1 2 3 时才会结束循环,如果硬要输入其他的也结束循环,你修改结束条件就行了
2013-05-14 12:24
计科1102
Rank: 1
等 级:新手上路
帖 子:56
专家分:9
注 册:2013-4-26
收藏
得分:0 
就是不知道怎么修改才放到这里来让各路大神指教的呀,还有请您帮修改一下,感激不尽啊
2013-05-14 19:04
cuijunchao
Rank: 5Rank: 5
来 自:湖南桂东
等 级:职业侠客
威 望:3
帖 子:132
专家分:386
注 册:2012-4-4
收藏
得分:0 
你修改后要达到个什么效果了 ?程序每一步都要目的明确,要不然就会是是而非。这个问题不难的,你自己去对照ASCII表就可以完成 。
2013-05-16 12:37
快速回复:求有空的大神帮忙调试一下,在输入任何一个字母的时候就会出现死循环, ...
数据加载中...
 
   



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

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