读书人

不知道到底是哪错了?解决方法

发布时间: 2012-03-05 11:54:01 作者: rapoo

不知道到底是哪错了?
以下是小弟照书(PDF不是很清楚)编的一个猜数字的小游戏,对于文本属性的一些问题还是不大明白,比如像textattr的用法,请大家帮忙看看哪有错误!

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
void main(void)
{
int answer[4],guess=0,a,b,times=0,i,j; /*定义数组answer[4]用来放答案,guess用来放玩家所猜出的数,位置和数字都对的用A来表示,只是数字对的用B表示*/
clrscr();
for (i=0;i <=3;i++)
{
randomize(); /*随机数发生器*/
answer[i]=rand()%10; /*这句就有些不明白了,请达人详解*/
for (j=0;j <i;j++)
{
while (answer[i]==answer[j])
{
answer[i]=rand()%10;
j=-1;
}
}
}
window (0,0,40,11)
textattr (YELLOW+(green < <4)); /*这就是最不明白的地方了*/
cprintf ( "please guess\n ");
while (a!=4) /*从这里开始进入猜数和答案的对比循环*/
{
a=0;
b=0;
times++;
do /*为什么要用DO循环??*/
{
window (10,0,40,21);
cprintf ( "\r%d ",times);
cscanf ( "%d ",&guess);
if (guess==0)
exit (0);
}
while (guess <0||guess> 9999);
for (i=3;i> -1;i--)
{
for (j=0;j <4;j++)
{
if ((int)(guess/pow10(i)==answer[j]) /*开始比较最高位的数是否和答案一样*/
{
if (i+j=3) a=a+1;
else b=b+1;
}
}
guess=guess-(int)(guess/pow10(i))*pow10(i); /*去掉上次比较的那一位数,进入下一位比较*/
}
window (20,0,40,31);
cprintf ( "\n\r% %dA%dB\n ",a,b); /*最后输出是_A_B*/
}
}


[解决办法]
answer[i]=rand()%10; /*这句就有些不明白了,请达人详解*/
-----rand()返回随机数,整句给answer数组产生0到9的随机数
[解决办法]
textattr (YELLOW+(green < <4)); /*这就是最不明白的地方了*/
------大概是给屏幕上的字设定颜色, < <为右移,实际效果为除于16
[解决办法]
函数名: rand
功 能: 随机数发生器
用 法: void rand(void);
程序例:

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

int main(void)
{
int i;

printf( "Ten random numbers from 0 to 99\n\n ");
for(i=0; i <10; i++)
printf( "%d\n ", rand() % 100);
return 0;
}


[解决办法]
DO循环
适合用在至少需要执行一次的地方
[解决办法]
rand()%10;产生的数字是0-9

textattr (YELLOW+(green < <4)); 这个是设置文本属性的函数,其参数可以用一个字节即8位数来描述-----> [BLINK][R][G][B][I][R][G][B]
闪烁 红 绿 蓝 亮 红 绿 蓝
| | | |
------- ------
| |
背景色 前景色
其中低4位用来设置字符颜色(对应值0~15),4~6位来显示背景色(0~7的颜色值)
YELLOW+(green < <4)表示左移4位,变成4~6位

读书人网 >C语言

热点推荐