当前位置: 代码迷 >> C语言 >> 总是卡在循环上,大家看看怎么可以把我的这个goto改为while,谢谢。
  详细解决方案

总是卡在循环上,大家看看怎么可以把我的这个goto改为while,谢谢。

热度:258   发布时间:2008-02-03 22:44:20.0
总是卡在循环上,大家看看怎么可以把我的这个goto改为while,谢谢。
大家好,又给大家添麻烦了,今天又做了个习题,尽量作得比书上的要求高些,我增加了二个功能:

一:当输入数字错误时,给出提示,重新输入;

二:当猜字结束后,可以询问是否重新开始。

    我就卡在这第二条上了,我知道程序中用goto语句不好,可是试了不下百次,就是不能用while取代goto,请大家帮忙,在此谢过了。

      声明:我为新手,所以代码健壮性和可移植性不是很高,技术含量也很低,代码也超过30行,我用的编译器是WIN-TC。如果对此有看法的朋友尽可不必回帖。谢谢支持。

    再次谢谢大家,不怕找出错误,您找出的错误和不足之处,就是我前进莫大的动力与支持,请您畅所欲言,如果是对此程序有挖苦讽刺以及恶毒批评,我会更加感激您。谢谢。

    另外,我对自定义函数已经明白,对指针还没学到,所以尽量请不要改成这两种模式的。

    再次感谢。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
   int a,b,c,n;
  fh:  printf("***********************************************************\n");
   printf("您好,现在请您猜一个1000以内的整数。\n您有20次机会,每次您猜错了,系统会提\n示您猜得大了或者小了。祝您玩得愉快!\n");
   printf("***********************************************************\n");
   n=1;
   srand(time(NULL));
   b=rand()%1000+1;
   do
  {
   printf("请您输入一个数字:");
   scanf("\n%d",&a);
   while(a<1||a>1000)
   {
     printf("对不起,您输入的数字不对,请重新输入:");
     scanf("\n%d",&a);
   }
     if(a>b)
     {
       printf("对不起,您输入的数字过大,请重新输入。\n");
       printf("**********************************************************\n");
     }
     if(a<b)
     {
        printf("对不起,您输入的数字太小,请重新输入。\n");
        printf("**********************************************************\n");
     }
      n++;
     if(n==21)break;
     printf("这是您第%d次猜数!\n",n);
    }
     while(a!=b) ;
     if(a==b)
     printf("恭喜您,猜对了!\n");
     if(n==21)
     printf("您好,您的次数已到!\n");
     printf("请问您还想继续玩吗?是请按1,按其它键退出!");
     scanf("\n%d",&c);
     if(c==1)
     goto fh;
    getch();
}
搜索更多相关的解决方案: goto  数字  习题  语句  

----------------解决方案--------------------------------------------------------
我想一下``在你设计``你说的第二个功能前``

其他功能是不是按着你的程序来运行的``

因为我只想帮你解决第2个问题``所以中间的代码只要没错``我就不用在去看了

我下一个回复回说出我的意见
----------------解决方案--------------------------------------------------------
经过测试,正常运行。

我只是想把goto去掉。
----------------解决方案--------------------------------------------------------
我的方法是这样的(能简化的我都简化了):

main()
{
  一些程序语句 ;

  while ( 判断条件 )
  {
    你需要根据输入重复执行的代码 ;
    更新判断条件 ;
  }

  一些程序语句 ;
}
----------------解决方案--------------------------------------------------------
如果不清楚``我可以写个简短的代码``作为例子
----------------解决方案--------------------------------------------------------
劳烦您看仔细些行么?虽然程序简单了些,但也应当看仔细罢?

    您说的do~while 或者while 语句,道理我明白,我程序中也用了一个do~while语句。可是当我把最后一句goto改为while的时候,程序又混乱了~~~吓死我了。

   测试不下数十回,达百次之多。

    难道是do~~while不可以再嵌套while?不明白。
----------------解决方案--------------------------------------------------------
对不起``我现在得走了``

明天来一定给你程序``

我现在真的有急事```对不起``对不起!!!
----------------解决方案--------------------------------------------------------
可以
如果循环里面没问题的话。
你就在fh:的前面加句"while(1){" ,
然后把"if(c==1) goto fh;"
替换为"if(c!=1) break;}"
----------------解决方案--------------------------------------------------------
当然fh:就不要了
当然fh:就不要了
----------------解决方案--------------------------------------------------------
回复 8# 的帖子
这个方法我也试过,刚才又重新试了一遍,果然和以前一样。

当按1重新猜数的时候,没问题,可以运行,当按其它键的时候,屏幕会不断地输出printf中的字符,而且刷新速度极快。

再请您想一想,是不是我的程序哪不对?不过用goto的时候,正常运行。
----------------解决方案--------------------------------------------------------