| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3607 人关注过本帖
标题:总是卡在循环上,大家看看怎么可以把我的这个goto改为while,谢谢。
只看楼主 加入收藏
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
发现个错误:如下

while(a != b);


只是随便看了下,代码

[[it] 本帖最后由 cosdos 于 2008-2-13 00:07 编辑 [/it]]

—>〉Sun〈<—
2008-02-12 23:19
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

/*
    发一个我修改的程序
    DEV-C++ 通过编译
    2008-2-12_23:40
*/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int a, b, n, temp;

    srand(time(NULL));

    do
    {
        system("cls");
        n = 0;
        b = rand() % 1000 + 1;   /* 1 - 1000 */
        
        printf("***********************************************************\n"
               "您好,现在请您猜一个1000以内的整数。\n"
               "您有20次机会,每次您猜错了,系统会提\n"
               "示您猜得大了或者小了。祝您玩得愉快!\n"
               "***********************************************************\n"
              );

        do{
            do
            {
                printf("请您输入一个数字N,并且1 < N < 1000: ");
                temp = scanf("%d", &a);
                while(getchar() != '\n')
                    continue;
                if(temp != 1 || a < 1 || a > 1000)
                {
                    puts("输入的数字无效!");
                    temp = 0;
                }
            }while(temp != 1);
        
            n++;
        
            printf("这是您第%d次猜数!\n", n);

            if(a > b)
            {
                printf("对不起,您输入的数字过大,请重新输入。\n");
                printf("**********************************************************\n");
            }
            else if(a < b)
            {
                printf("对不起,您输入的数字太小,请重新输入。\n");
                printf("**********************************************************\n");
            }
            else if(a == b)
            {
                printf("恭喜您,猜对了!\n");
                break;
            }
        }while(n < 20);
        
        if(a != b)
            printf("您好,您的次数已到!\n");
        printf("请问您还想继续玩吗?是请按1,按其它键退出... ");
        temp = getch();
        if(temp != '\n')
            putchar('\n');
    }while(temp == '1');
   
    puts("Game Over!\n按任意健退出...");
    getch();
   
    return 0;
}

—>〉Sun〈<—
2008-02-12 23:40
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
   int a,b,c,n;
  do{  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);
     }
     while(c==1);
    getch();
}
我也改了一下。汉字都是乱码,没办法测试。。。
2008-02-13 09:24
boralin
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-2-15
收藏
得分:0 
我也写一个,您看看符合要求不?
我用的编写软件是DEV C++ (devcpp-4.9.9.2):
这里我就不产生随机数了,系统被猜数我设定为 600 :
程序运行正常:
#include<stdio.h>

void main(){
     
     int systemNumber=600; //系统被猜数
     int num=0; //用户输入的猜测数
     int i=20; //计算机会次数的变量
     char again; //是否继续游戏
      
     do{
         printf("您好,现在请您猜一个1000以内的整数。\n您有20次机会,每次您猜错了,系统会提示您猜得大了或者小了。祝您玩得愉快!\n");
         while(i>0){
             printf("请猜数,还有次%d机会:",i);
             scanf("%d",&num);
             if(num==systemNumber){ //用户猜对
                 printf("恭喜您,猜对了!\n");
                 break;                                            
             }else{ //用户猜错
                 if(num>systemNumber){ //猜大了
                     printf("对不起,您输入的数字过大。\n");
                 }else{ //猜小了
                     printf("对不起,您输入的数字过小。\n");
                 }      
             }
             i--;  //猜测的机会减去一次      
         }
         printf("继续游戏 y ; 退出游戏 n ;");
         fflush(stdin); //清空键盘缓存
         again=getchar(); //接收用户输入的字符
     }while(again=='y' || again=='Y'); //输入的是小写的 y 或者大写的 Y ,继续游戏
     
}
2008-02-15 04:26
boralin
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-2-15
收藏
得分:0 
现在大多不推荐使用GOTO了
现在大多不推荐使用GOTO了
2008-02-15 04:39
aprogram
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-2-15
收藏
得分:0 
我试过,没问题
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int a,b,c,n;
    while (1)
    {
       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)
        {
            break;
        }
        getch();
    }
}
2008-02-15 21:18
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
谢谢诸位!!!!

真有热心人~!
2008-02-15 22:33
jxw123
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-2-16
收藏
得分:0 
我是这样写的!
/*现在请您猜一个1000以内的整数。您有20次机会,每次您猜错了,系统会提示您猜得大了或者小了。*/

#include"stdio.h"
#include"stdlib.h"
#include"time.h"
#include"ctype.h"
#include"conio.h"
int main()
{
    int right,guess,n,count=0;//right正确答案  guess用户猜的数字  n选择功能  count记录用户猜错的次数
    printf("1:猜数字游戏\t2退出\n");
    printf("请选择:");
    scanf("%d",&n);
    for(;n!=2;)
    {
        if(n==1)
        {
            srand((unsigned)time(NULL));
            right=rand()%1000;
            //printf("%d\n",right);//正确答案
            printf("请输入您猜的数字:");
            while(count<20)//只能猜错20次
            {
                scanf("%d",&guess);
                if(guess==right)
                {
                    printf("恭喜您猜对了\n");
                    break;//如果猜对跳出while循环
                }
                if(guess<right)
                {
                    printf("小了\n请继续:");
                    count++;//记录猜错一次
                    continue;//如果猜错跳出if语句,继续while循环
                }
                if(guess>right)
                {
                    printf("大了\n请继续:");
                    count++;//记录猜错一次
                    continue;//如果猜错跳出if语句,继续while循环
                }
            }
            if(count==20)//如果猜错20次
            {
                printf("很遗憾,您没有猜出!\n");
            }
        }
        else if(n==2)
        {
            break;//如果n等于2,跳出整个循环
        }
        else
        {
            printf("输入错误,请重新输入\n");
        }
        printf("按任意键返回主菜单:");
        getch();//接收任意一个字符,返回主菜单
        system("cls");//清屏函数
        printf("1:猜数字游戏\t2退出\n");
        printf("请选择:");
        scanf("%d",&n);
    }
    system("pause");//系统暂停功能
    return 0;
}
2008-02-16 03:10
快速回复:总是卡在循环上,大家看看怎么可以把我的这个goto改为while,谢谢。
数据加载中...
 
   



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

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