总是卡在循环上,大家看看怎么可以把我的这个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();
}
----------------解决方案--------------------------------------------------------
我想一下``在你设计``你说的第二个功能前``
其他功能是不是按着你的程序来运行的``
因为我只想帮你解决第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的时候,正常运行。
----------------解决方案--------------------------------------------------------