回 帖 发 新 帖 刷新版面

主题:为什么循环不行啊

#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{int red[33],blue[16],num1=6,num2=1,max_mid1=33,max_mid2=16,i,j;
int chosered[6],choseblue,choice_r,choice_b;
char ch1,ch2;

printf("**********欢迎购买中国福利彩票------双色球**************\n");
printf("~~~~奉献一份爱心,收获一份意外的喜悦,祝你好运!~~~~~~~~~~~~~~\n" );
printf("          您是否采用机选(y/n):");
scanf("%c",&ch1); 
  if(toupper(ch1)=='Y')
   {do 
     {printf("机选开始\n"); 
       for(i=0;i<max_mid1;i++)   /*所有的红球*/ 
             {
              red[i]=i+1;
                }
         srand((unsigned)time(NULL));  /*随机取出6红球*/ 
         for(i=0;i<num1;i++)
           {choice_r=rand()%max_mid1;
             chosered[i]=red[choice_r];
             for(j=choice_r;j<max_mid1;j++)
               {red[j]=red[j+1];
                  }
              max_mid1--;  
            } 
         for(i=0;i<max_mid2;i++)  /*所有的蓝球*/ 
           {
              blue[i]=i+1;  
            } 
          srand((unsigned)time(NULL));  /*随机取出1蓝球*/ 
          choice_b=rand()%max_mid2;
          choseblue=blue[choice_b];
          printf("本注双色球机选的号码为:"); /*号码输出*/ 
          printf("红球为:");
          for(i=0;i<num1;i++)
            {printf("   %d",chosered[i]);
             }
          printf("   蓝球为:%d",choseblue); 
          printf("\n是否再选一注(y/n)");
          scanf("%c",&ch2);
    }while(toupper(ch2)=='Y');
   } 
 else 
 {printf("请输入你所选的号码");
 } 
 getch();
 return 0;
}    
       
       

回复列表 (共10个回复)

沙发


#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
    int red[33],blue[16],num1=6,num2=1,max_mid1=33,max_mid2=16,i,j;
    int chosered[6],choseblue,choice_r,choice_b;
    char ch1,ch2;

    printf("**********欢迎购买中国福利彩票------双色球**************\n");
    printf("~~~~奉献一份爱心,收获一份意外的喜悦,祝你好运!~~~~~~~~~~~~~~\n" );
    printf("          您是否采用机选(y/n):");
    scanf("%c",&ch1);
    if (toupper(ch1)=='Y')
    {
        do
           {
            printf("机选开始\n");
            for (i=0;i<max_mid1;i++)  /*所有的红球*/
            {
                red[i]=i+1;
            }
            srand((unsigned)time(NULL));  /*随机取出6红球*/
            for (i=0;i<num1;i++)
            {
                choice_r=rand()%max_mid1;
                chosered[i]=red[choice_r];
                for (j=choice_r;j<max_mid1;j++)
                {
                    red[j]=red[j+1];
                }
                max_mid1--;
            }
            for (i=0;i<max_mid2;i++) /*所有的蓝球*/
            {
                blue[i]=i+1;
            }
            srand((unsigned)time(NULL));  /*随机取出1蓝球*/
            choice_b=rand()%max_mid2;
            choseblue=blue[choice_b];
            printf("本注双色球机选的号码为:"); /*号码输出*/
            printf("红球为:");
            for (i=0;i<num1;i++)
            {
                printf("   %d",chosered[i]);
            }
            printf("   蓝球为:%d",choseblue);
            printf("\n是否再选一注(y/n)");   
    [color=FF0000] fflush(stdin);[/color]            scanf("%c",&ch2);
           }while(toupper(ch2)=='Y');
    }
    else
    {
        printf("请输入你所选的号码");
    }
    getch();
    return 0;
}

再次输入要刷新缓冲区
现在循环可以运行

板凳


为什么我循环了6次后又不行了
是内存中缓存太小了吗
不可能吧

3 楼

  问题出在:max_mid1--;你每选一注red[]的size减小6。
5次之后,red[]只有3个元素了,你还怎么选?
do
{ max_mid1=33;//do后面加这个就行了

4 楼

不是 
是你的程序中
此语句
    max_mid1--;
经过几次的循环,变成了0
而你的程序
此语句
choice_r=rand()%max_mid1;
就会产生错误.
除数不能为0,为0了就不行了.
明白了吧
你再自己改改.

5 楼

#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
    int red[33],blue[16],num1=6,num2=1,max_mid1=33,max_mid2=16,i,j;
    int chosered[6],choseblue,choice_r,choice_b;
    char ch1,ch2;

    printf("**********欢迎购买中国福利彩票------双色球**************\n");
    printf("~~~~奉献一份爱心,收获一份意外的喜悦,祝你好运!~~~~~~~~~~~~~~\n" );
    printf("          您是否采用机选(y/n):");
    scanf("%c",&ch1);
    if (toupper(ch1)=='Y')
    {
        do
           {
            max_mid1=33
            printf("机选开始\n");
            for (i=0;i<max_mid1;i++)  /*所有的红球*/
            {
                red[i]=i+1;
            }
            srand((unsigned)time(NULL));  /*随机取出6红球*/
            for (i=0;i<num1;i++)
            {
                choice_r=rand()%max_mid1;
                chosered[i]=red[choice_r];
                for (j=choice_r;j<max_mid1;j++)
                {
                    red[j]=red[j+1];
                }
                max_mid1--;
            }
            for (i=0;i<max_mid2;i++) /*所有的蓝球*/
            {
                blue[i]=i+1;
            }
            srand((unsigned)time(NULL));  /*随机取出1蓝球*/
            choice_b=rand()%max_mid2;
            choseblue=blue[choice_b];
            printf("本注双色球机选的号码为:"); /*号码输出*/
            printf("红球为:");
            for (i=0;i<num1;i++)
            {
                printf("   %d",chosered[i]);
            }
            printf("   蓝球为:%d",choseblue);
            printf("\n是否再选一注(y/n)");   
             fflush(stdin);          
            scanf("%c",&ch2);
           }while(toupper(ch2)=='Y');
    }
    else
    {
        printf("请输入你所选的号码");
    }
    getch();
    return 0;
}

6 楼

彩票这个东西你再怎么选,它也是随机的,有什么用?

7 楼

同意四楼的说法,在选第六注时,选完三个红球后,max_mid1==0。再去选第四个红球就出错了。
5楼改程序不能去掉此语句
 max_mid1--;否则选号有问题,不能出现同号的。你没买过彩票吧?

8 楼

可以啊。。。

9 楼


thank you every one!

10 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

我来回复

您尚未登录,请登录后再回复。点此登录或注册