user-0 提问: 求大神帮忙是缩短下程序     谢谢  在线等

回复:
user: user-1
content: 不能编译，给你个参考吧，忘采纳。 UCHAR a[16] = {0,0,0,0,0,0,4,0,0,0,0,3,0,2,1,0 }  UCHAR OnCase(UCHAR ch1,UCHAR ch2,UCHAR key) { 	if(p1 == ch1*16+ch2) 		return key = a[ch1]+a[ch2]*10;	 	else  		return 0; }  void deal(uchar P1,uchar char2) { 	uchar temp = P1,key; 	if( (temp&0xf0) != 0xf0 ) 	{ 		delayms(10); 		if( (temp&0xf0) != 0xf0 ) 		{ 			OnCase(e,ch2,key);//e开头 			OnCase(d,ch2,key);//d开头 			OnCase(b,ch2,key);//b开头 			OnCase(7,ch2,key);//7开头 			 			temp &= 0xf0; 			while(temp!=0xf0) 			{ 				temp=P1; 				temp &= 0xf0; 			} 			display(key); 		} 	} }  void keyscan() { 	deal(0x0e,0x0e);//e结尾 	deal(0x0d,0x0d);//d结尾 	deal(0x0b,0x0b);//b结尾 	deal(0x07,0x07);//7结尾 }

user: user-2
content: 可以分几个函数出来的！多加几个接口！注意代码复用下就好！

user: user-0
content: 引用 11 楼 tanling_zero 的回复:[quote=引用 10 楼 u012887645 的回复:] [quote=引用 9 楼 tanling_zero 的回复:] // Test.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include <iostream> using namespace std;    void display( char key ) { 	cout<<"key = "<<key<<endl;  }  void delayms( int a ){}   struct _strKey {  	int P; 	int case_value[4];  }g_key[] = { 0xfe , 0xee , 0xde , 0xbe , 0x7e ,              0xfd , 0xed , 0xdd , 0xbe , 0x7e , 			 0xfb , 0xeb , 0xdb , 0xbb , 0x7b , 			 0xf7 , 0xe7 , 0xd7 , 0xb7 , 0x77  };  int getKey() { 	 	int key = 0 ; 	for ( int n = 0 ; n < 4; n++ ) 	{ 		int P1 = g_key[n].P; 		char temp = P1 & 0xf0;  		delayms(10); 		if(temp != 0xf0) 		{ 			for (int i = 0 ; i < 4 ; i++ ) 			{ 				if (temp == g_key[n].case_value[i]) 				{ 					key = ( n + 1 )*10 + i + 1;  					while(temp!=0xf0) 					{ 						temp=P1; 						temp=temp&0xf0; 					}  					return key; 				} 			} 		} 	}  	return 0; }  void  keyscan() { 	int key = getKey(); 	display(key);  }  int _tmain(int argc, _TCHAR* argv[]) {  	keyscan();  	return 0; }    不知道是不是你要的，细节自己修改，给点下载分？   这个太深入了   表示不怎么懂[/quote]  那自己先把重复的代码只写一遍，然后上面写个for，再考虑把数据变成数组，然后循环就可以了 [/quote]  能不能加个qq

user: user-0
content: 引用 13 楼 u012887645 的回复:[quote=引用 12 楼 zhao4zhong1 的回复:] [quote=引用 8 楼 u012887645 的回复:] [quote=引用 7 楼 zhao4zhong1 的回复:] uchar trans(uchar t) {     static uchar s[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbe,0x7e,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};     static uchar d[16]={  11,  12,  13,  14,  21,  22,  23,  24,  31,  32,  33,  34,  41,  42,  43,  44};     int i;      for (i=0;i<16;i++) if (s[i]==t) return d[i];     printf("oops!\n");     return 0; } void  keyscan() {     uchar temp,key;     uchar p4[4]={0xfe,0xfd,0xfb,0xf7};     int j;      for (j=0;j<4;j++) {         P1=p4[j];         temp=P1;         temp=temp&0xf0;         if(temp!=0xf0) {             delayms(10);             temp=P1;             temp=temp&0xf0;             if(temp!=0xf0) {                 temp=P1;                 key=trans(temp);                 while(temp!=0xf0) {                     temp=P1;                     temp=temp&0xf0;                 }                 display(key);             }         }     } }    printf("oops!\n");这是什么[/quote] 意外遇到temp的值不在意料之中的16个值时，输出oops!提醒程序员，并返回0.  oops int. 表示惊讶, 狼狈时所发的喊声  [/quote]   括号内的不要行不行[/quote]   能不能加个qq：568519177

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:[quote=引用 8 楼 u012887645 的回复:] [quote=引用 7 楼 zhao4zhong1 的回复:] uchar trans(uchar t) {     static uchar s[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbe,0x7e,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};     static uchar d[16]={  11,  12,  13,  14,  21,  22,  23,  24,  31,  32,  33,  34,  41,  42,  43,  44};     int i;      for (i=0;i<16;i++) if (s[i]==t) return d[i];     printf("oops!\n");     return 0; } void  keyscan() {     uchar temp,key;     uchar p4[4]={0xfe,0xfd,0xfb,0xf7};     int j;      for (j=0;j<4;j++) {         P1=p4[j];         temp=P1;         temp=temp&0xf0;         if(temp!=0xf0) {             delayms(10);             temp=P1;             temp=temp&0xf0;             if(temp!=0xf0) {                 temp=P1;                 key=trans(temp);                 while(temp!=0xf0) {                     temp=P1;                     temp=temp&0xf0;                 }                 display(key);             }         }     } }    printf("oops!\n");这是什么[/quote] 意外遇到temp的值不在意料之中的16个值时，输出oops!提醒程序员，并返回0.  oops int. 表示惊讶, 狼狈时所发的喊声  [/quote]   括号内的不要行不行

user: user-3
content: 引用 8 楼 u012887645 的回复:[quote=引用 7 楼 zhao4zhong1 的回复:] uchar trans(uchar t) {     static uchar s[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbe,0x7e,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};     static uchar d[16]={  11,  12,  13,  14,  21,  22,  23,  24,  31,  32,  33,  34,  41,  42,  43,  44};     int i;      for (i=0;i<16;i++) if (s[i]==t) return d[i];     printf("oops!\n");     return 0; } void  keyscan() {     uchar temp,key;     uchar p4[4]={0xfe,0xfd,0xfb,0xf7};     int j;      for (j=0;j<4;j++) {         P1=p4[j];         temp=P1;         temp=temp&0xf0;         if(temp!=0xf0) {             delayms(10);             temp=P1;             temp=temp&0xf0;             if(temp!=0xf0) {                 temp=P1;                 key=trans(temp);                 while(temp!=0xf0) {                     temp=P1;                     temp=temp&0xf0;                 }                 display(key);             }         }     } }    printf("oops!\n");这是什么[/quote] 意外遇到temp的值不在意料之中的16个值时，输出oops!提醒程序员，并返回0.  oops int. 表示惊讶, 狼狈时所发的喊声

user: user-4
content: 引用 10 楼 u012887645 的回复:[quote=引用 9 楼 tanling_zero 的回复:] // Test.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include <iostream> using namespace std;   void display( char key ) { 	cout<<"key = "<<key<<endl;  }  void delayms( int a ){}   struct _strKey {  	int P; 	int case_value[4];  }g_key[] = { 0xfe , 0xee , 0xde , 0xbe , 0x7e ,              0xfd , 0xed , 0xdd , 0xbe , 0x7e , 			 0xfb , 0xeb , 0xdb , 0xbb , 0x7b , 			 0xf7 , 0xe7 , 0xd7 , 0xb7 , 0x77  };  int getKey() { 	 	int key = 0 ; 	for ( int n = 0 ; n < 4; n++ ) 	{ 		int P1 = g_key[n].P; 		char temp = P1 & 0xf0;  		delayms(10); 		if(temp != 0xf0) 		{ 			for (int i = 0 ; i < 4 ; i++ ) 			{ 				if (temp == g_key[n].case_value[i]) 				{ 					key = ( n + 1 )*10 + i + 1;  					while(temp!=0xf0) 					{ 						temp=P1; 						temp=temp&0xf0; 					}  					return key; 				} 			} 		} 	}  	return 0; }  void  keyscan() { 	int key = getKey(); 	display(key);  }  int _tmain(int argc, _TCHAR* argv[]) {  	keyscan();  	return 0; }    不知道是不是你要的，细节自己修改，给点下载分？   这个太深入了   表示不怎么懂[/quote]  那自己先把重复的代码只写一遍，然后上面写个for，再考虑把数据变成数组，然后循环就可以了

user: user-0
content: 引用 9 楼 tanling_zero 的回复:// Test.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include <iostream> using namespace std;   void display( char key ) { 	cout<<"key = "<<key<<endl;  }  void delayms( int a ){}   struct _strKey {  	int P; 	int case_value[4];  }g_key[] = { 0xfe , 0xee , 0xde , 0xbe , 0x7e ,              0xfd , 0xed , 0xdd , 0xbe , 0x7e , 			 0xfb , 0xeb , 0xdb , 0xbb , 0x7b , 			 0xf7 , 0xe7 , 0xd7 , 0xb7 , 0x77  };  int getKey() { 	 	int key = 0 ; 	for ( int n = 0 ; n < 4; n++ ) 	{ 		int P1 = g_key[n].P; 		char temp = P1 & 0xf0;  		delayms(10); 		if(temp != 0xf0) 		{ 			for (int i = 0 ; i < 4 ; i++ ) 			{ 				if (temp == g_key[n].case_value[i]) 				{ 					key = ( n + 1 )*10 + i + 1;  					while(temp!=0xf0) 					{ 						temp=P1; 						temp=temp&0xf0; 					}  					return key; 				} 			} 		} 	}  	return 0; }  void  keyscan() { 	int key = getKey(); 	display(key);  }  int _tmain(int argc, _TCHAR* argv[]) {  	keyscan();  	return 0; }    不知道是不是你要的，细节自己修改，给点下载分？   这个太深入了   表示不怎么懂

user: user-4
content: // Test.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include <iostream> using namespace std;   void display( char key ) { 	cout<<"key = "<<key<<endl;  }  void delayms( int a ){}   struct _strKey {  	int P; 	int case_value[4];  }g_key[] = { 0xfe , 0xee , 0xde , 0xbe , 0x7e ,              0xfd , 0xed , 0xdd , 0xbe , 0x7e , 			 0xfb , 0xeb , 0xdb , 0xbb , 0x7b , 			 0xf7 , 0xe7 , 0xd7 , 0xb7 , 0x77  };  int getKey() { 	 	int key = 0 ; 	for ( int n = 0 ; n < 4; n++ ) 	{ 		int P1 = g_key[n].P; 		char temp = P1 & 0xf0;  		delayms(10); 		if(temp != 0xf0) 		{ 			for (int i = 0 ; i < 4 ; i++ ) 			{ 				if (temp == g_key[n].case_value[i]) 				{ 					key = ( n + 1 )*10 + i + 1;  					while(temp!=0xf0) 					{ 						temp=P1; 						temp=temp&0xf0; 					}  					return key; 				} 			} 		} 	}  	return 0; }  void  keyscan() { 	int key = getKey(); 	display(key);  }  int _tmain(int argc, _TCHAR* argv[]) {  	keyscan();  	return 0; }    不知道是不是你要的，细节自己修改，给点下载分？

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:uchar trans(uchar t) {     static uchar s[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbe,0x7e,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};     static uchar d[16]={  11,  12,  13,  14,  21,  22,  23,  24,  31,  32,  33,  34,  41,  42,  43,  44};     int i;      for (i=0;i<16;i++) if (s[i]==t) return d[i];     printf("oops!\n");     return 0; } void  keyscan() {     uchar temp,key;     uchar p4[4]={0xfe,0xfd,0xfb,0xf7};     int j;      for (j=0;j<4;j++) {         P1=p4[j];         temp=P1;         temp=temp&0xf0;         if(temp!=0xf0) {             delayms(10);             temp=P1;             temp=temp&0xf0;             if(temp!=0xf0) {                 temp=P1;                 key=trans(temp);                 while(temp!=0xf0) {                     temp=P1;                     temp=temp&0xf0;                 }                 display(key);             }         }     } }    printf("oops!\n");这是什么

user: user-3
content: uchar trans(uchar t) {     static uchar s[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbe,0x7e,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};     static uchar d[16]={  11,  12,  13,  14,  21,  22,  23,  24,  31,  32,  33,  34,  41,  42,  43,  44};     int i;      for (i=0;i<16;i++) if (s[i]==t) return d[i];     printf("oops!\n");     return 0; } void  keyscan() {     uchar temp,key;     uchar p4[4]={0xfe,0xfd,0xfb,0xf7};     int j;      for (j=0;j<4;j++) {         P1=p4[j];         temp=P1;         temp=temp&0xf0;         if(temp!=0xf0) {             delayms(10);             temp=P1;             temp=temp&0xf0;             if(temp!=0xf0) {                 temp=P1;                 key=trans(temp);                 while(temp!=0xf0) {                     temp=P1;                     temp=temp&0xf0;                 }                 display(key);             }         }     } }

user: user-0
content: [quote=引用 5 楼 turingo 的回复:] 改用查表的方法。  怎么改  求教

user: user-5
content: 改用查表的方法。  引用 楼主 u012887645 的回复:void  keyscan() { uchar temp,key; P1=0xfe; temp=P1; temp=temp&0xf0; if(temp!=0xf0) {   delayms(10);   temp=P1;   temp=temp&0xf0;   if(temp!=0xf0)   {    temp=P1;    switch(temp)    {    case 0xee:        key=11; 	   break;    case 0xde:       key=12; 	  break;    case 0xbe:       key=13; 	  break;    case 0x7e:       key=14; 	  break;    }    while(temp!=0xf0)    {     temp=P1; 	temp=temp&0xf0; 	} 	display(key); 	} 	}   P1=0xfd; temp=P1; temp=temp&0xf0; if(temp!=0xf0) {   delayms(10);   temp=P1;   temp=temp&0xf0;   if(temp!=0xf0)   {    temp=P1;    switch(temp)    {    case 0xed:        key=21; 	   break;    case 0xdd:       key=22; 	  break;    case 0xbe:       key=23; 	  break;    case 0x7e:       key=24; 	  break;    }    while(temp!=0xf0)    {     temp=P1; 	temp=temp&0xf0; 	} 	display(key); 	} 	}   P1=0xfb; temp=P1; temp=temp&0xf0; if(temp!=0xf0) {   delayms(10);   temp=P1;   temp=temp&0xf0;   if(temp!=0xf0)   {    temp=P1;    switch(temp)    {    case 0xeb:        key=31; 	   break;    case 0xdb:       key=32; 	  break;    case 0xbb:       key=33; 	  break;    case 0x7b:       key=34; 	  break;    }    while(temp!=0xf0)    {     temp=P1; 	temp=temp&0xf0; 	} 	display(key); 	} 	} 	P1=0xf7; temp=P1; temp=temp&0xf0; if(temp!=0xf0) {   delayms(10);   temp=P1;   temp=temp&0xf0;   if(temp!=0xf0)   {    temp=P1;    switch(temp)    {    case 0xe7:        key=41; 	   break;    case 0xd7:       key=42; 	  break;    case 0xb7:       key=43; 	  break;    case 0x77:       key=44; 	  break;    }    while(temp!=0xf0)    {     temp=P1; 	temp=temp&0xf0; 	} 	display(key); 	} 	} }

user: user-0
content: 引用 3 楼 wusuopuBUPT 的回复:引用 1 楼 zhao4zhong1 的回复:在本人眼里，不超过1000行的代码都够短。赵老师好厉害。  能不能帮我改下

user: user-6
content: 引用 1 楼 zhao4zhong1 的回复:在本人眼里，不超过1000行的代码都够短。赵老师好厉害。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:在本人眼里，不超过1000行的代码都够短。  能不能帮我改短  用数组之类的

user: user-3
content: 在本人眼里，不超过1000行的代码都够短。