不知道到底是哪错了?

QiYuan_dl 2007-04-26 03:41:25
以下是小弟照书(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*/
}
}
...全文
333 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
QiYuan_dl 2007-04-28
  • 打赏
  • 举报
回复
mochen5460(mochen)

有道理,可我手头的书里讲的函数实在太少了,只能在这补补了。
mochen5460 2007-04-27
  • 打赏
  • 举报
回复
楼主还是补补基础吧
chenyu2202863 2007-04-27
  • 打赏
  • 举报
回复
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位
QiYuan_dl 2007-04-27
  • 打赏
  • 举报
回复
answer[i]=rand()%10;-----这个为什么后面还有个%10,在上述例子中也有个%100(bargio_susie(平和 自制 审慎) ),结果是,有%100的结果为没有%100的后两位,即:假如没有%100这个的出来的结果是156231,有%100的结果就成了31,总是后两位。还请达人详解!先谢过!另外textattr (YELLOW+(green<<4)); YELLOW这个黄色是在哪里变色?最后,还请时间较多的,麻烦看看我的源码,改过N回了,可还是报错!!!
li8848li 2007-04-26
  • 打赏
  • 举报
回复
<<是左移
lidongri 2007-04-26
  • 打赏
  • 举报
回复
do /*为什么要用DO循环??*/
{
window (10,0,40,21);
cprintf ("\r%d",times);
cscanf ("%d",&guess);
if (guess==0)
exit (0);
}
while (guess<0||guess>9999);
----
while (guess<0||guess>9999)
{
window (10,0,40,21);
cprintf ("\r%d",times);
cscanf ("%d",&guess);
if (guess==0)
exit (0);
}
也可以
celftj 2007-04-26
  • 打赏
  • 举报
回复
DO循环
适合用在至少需要执行一次的地方
bargio_susie 2007-04-26
  • 打赏
  • 举报
回复
函数名: 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;
}

celftj 2007-04-26
  • 打赏
  • 举报
回复
textattr (YELLOW+(green<<4)); /*这就是最不明白的地方了*/
------大概是给屏幕上的字设定颜色,<<为右移,实际效果为除于16
celftj 2007-04-26
  • 打赏
  • 举报
回复
answer[i]=rand()%10; /*这句就有些不明白了,请达人详解*/
-----rand()返回随机数,整句给answer数组产生0到9的随机数

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧