|
发表于 2014-11-8 16:48:20
|
显示全部楼层
本帖最后由 Mortal 于 2014-11-8 16:56 编辑
- #include<time.h>
- #include <windows.h>
- #include<stdlib.h>
- #include<stdio.h>
- #include<conio.h>
- main()
- {
- //定义所需变量
- int i, j[5], k[2], t, a, r;
- char c;
-
- /*标号*/loop: /*询问需要循环几次*/printf("你要几组号码? 请输入: ");
- //输入次数
- scanf("%d", &r);
- //以时间设置随机数种子
- srand( (unsigned)time( NULL ) );
- //循环r次
- for(a=1; a<=r; a++)
- {
- //五个普通号,循环五次
- for(i=0;i<5;i++)
- {
- //产生1~35之间的随机数
- j[i]=1+(int)(35.0*rand()/(RAND_MAX+1.0));
- //从大到小输出:如果大于,就互换,最终变成从大到小
- if(j[0]<j[1]){t=j[0];j[0]=j[1];j[1]=t;}
- if(j[0]<j[2]){t=j[0];j[0]=j[2];j[2]=t;}
- if(j[0]<j[3]){t=j[0];j[0]=j[3];j[3]=t;}
- if(j[0]<j[4]){t=j[0];j[0]=j[4];j[4]=t;}
- if(j[1]<j[2]){t=j[1];j[1]=j[2];j[2]=t;}
- if(j[1]<j[3]){t=j[1];j[1]=j[3];j[3]=t;}
- if(j[1]<j[4]){t=j[1];j[1]=j[4];j[4]=t;}
- if(j[2]<j[3]){t=j[2];j[2]=j[3];j[3]=t;}
- if(j[2]<j[4]){t=j[2];j[2]=j[4];j[4]=t;}
- if(j[3]<j[4]){t=j[3];j[3]=j[4];j[4]=t;}
- //打印
- printf(" %d",j[i]);
- //为了美观,如果是一位数(小于十),就打印一个空格
- if(j[i]<10)
- {
- //打印空格
- putchar(' ');
- }
- }
- //准备打印特别号,说明一下
- printf(" 特别号:");
- //两个特别号,循环两次
- for(i=0;i<2;i++)
- {
- //产生1~12之间的随机数
- k[i]=1+(int)(12.0*rand()/(RAND_MAX+1.0));
- //从大到小输出:如果大于,就互换,最终变成从大到小
- if(k[1]<k[0]){t=k[0];k[0]=k[1];k[1]=t;}
- if(k[0]<k[1]){t=k[1];k[1]=k[0];k[0]=t;}
- //打印
- printf(" %d",k[i]);
- //为了美观,如果是一位数(小于十),就打印一个空格
- if(k[i]<10)
- {
- //打印空格
- putchar(' ');
- }
- }
- //回车
- putchar('\n');
- }
- //回车
- putchar('\n');
- //询问需不需要继续选号
- printf("你还要继续选号吗,需要请按“Y”,不需要请按“N”:");
-
- fflush(stdin); //因为第一次scanf 输入的是数字然后回车 缓冲区中存放的是数字与回车 数字给第一次的%d带走了 但是回车还在缓冲区
- //输入‘y’或‘n’
- scanf("%c", &c);
- //如果是‘y’或‘Y’就跳转到loop标识符,反之结束程序
- if(c=='y' || c=='Y')
- {
- //跳转到loop标识符
- goto loop;
- }
- printf("程序结束, 请按任意键继续."); // 个人兴趣→v→
- //暂停屏幕
- getch();
- //返回值,结束程序
- return 0;
- }
复制代码 第一次scanf("%d", &r);
我输入5[回车]
这时缓冲区内是'5', '0x10'
然后scanf将5给了r
但是缓冲区内'0x10'的数据还在
所以保留到了第一次
scanf("%c", &c);
输入y
这时缓冲区内是'0x10', 'y'
因为'0x10' 是一个字符 所以自然被收走了
然后就因为c的值='0x10' 自然就跳过了
还有外层可以用
- do
- {
- ....
- fflush(stdin); //清空缓冲区
- scanf("%c", &c);
- }while(c == 'y' || c == 'Y');
复制代码 其实你一开始调试一次就知道了 断点在第二次的scanf之后一句话 会发现c的值是回车
|
|