| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2236 人关注过本帖
标题:菜鸟初次做东西  请高手指点迷津
只看楼主 加入收藏
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
晕,windows的API可不是那么好玩的~!

淘宝杜琨
2005-05-06 11:07
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
“看了您的程序我咋发现switch不如IF好使呢   您可真是高手啊!!!”

你是在说这一段吧...
if(Key==75)Xcursor=Xcursor>start+3?Xcursor-Xsize:Xcursor ;
if(Key==77)Xcursor=Xcursor<start+3+(a-1)*Xsize?Xcursor+Xsize:Xcursor ;
if(Key==72)Ycursor=Ycursor>start+12?Ycursor-Ysize:Ycursor ;
if(Key==80)Ycursor=Ycursor<start+12+(b-1)*Ysize?Ycursor+Ysize:Ycursor ;

你不是在讽刺我们的Knocker达人吧

淘宝杜琨
2005-05-06 11:09
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-05-06 11:23
xcv4c
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2005-5-4
收藏
得分:0 

大侠  又有问题了  请帮帮忙啊: #include "Conio.h" #include "dos.h" #include "stdio.h" #include "graphics.h" #include "ctype.h" #define closegr closegraph #define DIGITLEN 1000 #define MAXLINE 50 void cursor(); void initgr(void); void matrix(int ,int,int,int,int); int Xcursor,Ycursor ; int mem[50][50]; char m[100]; int main(void) { int a,b ; int i,j,k=0 ; int Xsize=50,Ysize=24 ; int Xstart,Ystart; int start=50 ; int Key=0 ,digit;

printf("line:"); scanf("%d",&a); printf("row:"); scanf("%d",&b); initgr(); matrix(start,Xsize,Ysize,a,b) ; Xstart=start; Ystart=start; Xcursor=Xstart; Ycursor=Ystart; cursor(); while(Key!=25) { while(bioskey(1)==0) cursor(); Key=bioskey(0); if ((Key<<8)>>8==27) break;

if(Key&0xff) /*如果不是方向键*/ /*这里加入接收部分,可以用getch(),outtextxy()等函数来处理,并根据所处的屏幕x,y值来对应矩阵的数组*/ { digit=(Key<<8)>>8; do { if (isdigit(digit)) { setfillstyle(0, 5); bar(Xcursor+1,Ycursor+1,Xcursor+Xsize-1,Ycursor+Ysize-1); setcolor(WHITE); m[k++]=digit; m[k]='\0'; outtextxy(Xcursor+3,Ycursor+Ysize/2,m); mem[(Ycursor-Ystart)/Ysize][(Xcursor-Xstart)/Xsize]=atoi(m);

} else { printf("\7"); break;

}

} while ((digit=getch())!=13);

}

else /*是方向键*/ { Key>>=8 ; if(Key==75)Xcursor=Xcursor>start?Xcursor-Xsize:Xcursor+(a-1)*Xsize; if(Key==77)Xcursor=Xcursor<start+(a-1)*Xsize?Xcursor+Xsize:Xcursor-(a-1)*Xsize ; if(Key==72)Ycursor=Ycursor>start?Ycursor-Ysize:Ycursor+(b-1)*Ysize ; if(Key==80)Ycursor=Ycursor<start+(b-1)*Ysize?Ycursor+Ysize:Ycursor-(b-1)*Ysize ;

for (k=0;k<=100;k++) m[k]=0; k=0; } } moveto(300,100); printf("what's u have input is :\n"); for (i=0;i<=b-1;i++) { for (j=0;j<=a-1;j++) printf("%d,",mem[i][j]); printf("\n"); } getch(); closegr(); return 0 ; } /* BGI初始化 */ void initgr(void) { int gd=DETECT,gm=0 ; /* 和gd = VGA,gm = VGAHI是同样效果 */ registerbgidriver(EGAVGA_driver); /* 注册BGI驱动后可以不需要.BGI文件的支持运行 */ initgraph(&gd,&gm,""); } /*光标*/ void cursor() { setlinestyle(0,0,2) ; setcolor(WHITE); line(Xcursor+3,Ycursor+21,Xcursor+3,Ycursor+4); delay(3500); setcolor(BLACK); line(Xcursor+3,Ycursor+21,Xcursor+3,Ycursor+4); delay(3500); }

void matrix(int start,int Xsize,int Ysize,int a,int b) { int i; for(i=0;i<=a;i++) { line(start+i*Xsize,start,start+i*Xsize,start+b*Ysize); /*画竖线*/ } for(i=0;i<=b;i++) { line(start,start+i*Ysize,start+a*Xsize,start+i*Ysize);

}

} 为什么矩阵数组的mem[0][0]总是0?我试过了  一行一列时输入数字后按回车之后如果不按方向键就没问题  按了方向键就会为○? 当我把86行改成 for (;k>=0,k--) m[k]=0; k=0; 就都没问题了,虽然问题解决了 可是不知为什么会出现这种情况??我冥思苦想了半天了   百思不得其解,,郁闷死了,请大侠帮我分析下?感激不尽!!!!

2005-05-07 00:14
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
这个垃圾代码是knocker负责的哦~~
插手不了了

淘宝杜琨
2005-05-07 02:27
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
看了一下,没调试,根据这三句:

                       m[k++]=digit;
                        m[k]='\0';
                        outtextxy(Xcursor+3,Ycursor+Ysize/2,m);

你的

for (;k&gt;=0,k--)
         m[k]=0;//这个for好象是没有必要的或者可以用 m[0]='\0' 代替
k=0 ;  / /k清零是必须,你的K值不能在不同的输入上累计吧?^_^

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-05-07 10:24
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
for (k=0;k&lt;=100;k++)
                m[k]=0;


换成这样试试

m[k=0]='\0';




九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-05-07 10:29
xcv4c
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2005-5-4
收藏
得分:0 
感谢两位大侠  不过我更不明白了  您的  m[k=0]='\0';  只把m[0]给赋成'\0'了  如果我第一格输入的是123    您的  m[k=0]='\0';  只把m[0]给赋成'\0'了 ,而m[1]==2,,,m[2]==3,,,,,m[3]='\0', 下次 我在另一个格里输入数字9时,,,,m[]不就等于923了嘛??





而且我的for (k=0;k&lt;=100;k++)
                m[k]=0;

为啥会造成只要一按方向键就会给mem[0][0]清零呢?为什么for (;k&gt;=0,k--)
         m[k]=0;  就行呢?



望大侠不要嫌麻烦啊   救救我啊
2005-05-07 12:31
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
1.for (k=0;k&lt;=100;k++)
                m[k]=0;//这是错的,没有k[100],你将&lt;=改成&lt;再看看是否还有mem][0]清零的情况

2.m[0]='\0';在你的程序其它部分无问题且输入无“异常”(---按照计设者的思路)情况下也是可以不要的,但k=0是必需的。这里的m[0]='\0'从程式的鲁棒性上考虑的。


3。我注意到你的定义

int mem[50][50];
char m[100];
你用什么编译器?mem[0][0]清零问题应该是 1 造成的,可以在这两个定义之间加入tmp[10][10],tmp1[5]再试试

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-05-07 12:54
xcv4c
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2005-5-4
收藏
得分:0 
1.不愧是大侠 果然是越界造成的   可是越界应该警告啊  他怎么给清零了?又为什么只给mem[0][0]清零  其它正常?? 我用的这个论坛上介绍的WIN-TC 1.8  编译器不太懂~   

2.我认为给char m[]  这个数组清零应该是必要的吧?要不然如果前一个数字是四位如1234后一个是三位如987   那么不会影响后一个的输出嘛?(9874);  不过经我调试果然如大侠所说  只要k=0就行了  这是为什么?
2005-05-07 13:10
快速回复:菜鸟初次做东西  请高手指点迷津
数据加载中...
 
   



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

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