| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3608 人关注过本帖
标题:总是卡在循环上,大家看看怎么可以把我的这个goto改为while,谢谢。
只看楼主 加入收藏
菜鸭
Rank: 1
等 级:新手上路
帖 子:262
专家分:0
注 册:2007-12-9
收藏
 问题点数:0 回复次数:27 
总是卡在循环上,大家看看怎么可以把我的这个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 数字 习题 语句 
2008-02-03 22:44
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
我想一下``在你设计``你说的第二个功能前``

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

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

我下一个回复回说出我的意见

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2008-02-03 23:02
菜鸭
Rank: 1
等 级:新手上路
帖 子:262
专家分:0
注 册:2007-12-9
收藏
得分:0 
经过测试,正常运行。

我只是想把goto去掉。

谈笑声中话天地,清茶浊酒品江湖。
昔日豪杰今安在?中华代有人才出!
2008-02-03 23:05
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
我的方法是这样的(能简化的我都简化了):

main()
{
  一些程序语句 ;

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

  一些程序语句 ;
}

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2008-02-03 23:06
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
如果不清楚``我可以写个简短的代码``作为例子

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2008-02-03 23:07
菜鸭
Rank: 1
等 级:新手上路
帖 子:262
专家分:0
注 册:2007-12-9
收藏
得分:0 
劳烦您看仔细些行么?虽然程序简单了些,但也应当看仔细罢?

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

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

    难道是do~~while不可以再嵌套while?不明白。

谈笑声中话天地,清茶浊酒品江湖。
昔日豪杰今安在?中华代有人才出!
2008-02-03 23:10
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
对不起``我现在得走了``

明天来一定给你程序``

我现在真的有急事```对不起``对不起!!!

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2008-02-03 23:22
sdyzandy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-2-3
收藏
得分:0 
可以
如果循环里面没问题的话。
你就在fh:的前面加句"while(1){" ,
然后把"if(c==1) goto fh;"
替换为"if(c!=1) break;}"
2008-02-03 23:43
sdyzandy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-2-3
收藏
得分:0 
当然fh:就不要了
当然fh:就不要了
2008-02-03 23:45
菜鸭
Rank: 1
等 级:新手上路
帖 子:262
专家分:0
注 册:2007-12-9
收藏
得分:0 
回复 8# 的帖子
这个方法我也试过,刚才又重新试了一遍,果然和以前一样。

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

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

谈笑声中话天地,清茶浊酒品江湖。
昔日豪杰今安在?中华代有人才出!
2008-02-04 00:06
快速回复:总是卡在循环上,大家看看怎么可以把我的这个goto改为while,谢谢。
数据加载中...
 
   



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

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