写一个定时器,每10毫秒读一次按孙吵键端口值。漏凯做如果是按下的值,则在下一个10毫秒时再检测一次按键端口值(消抖)。如果还是按下的值,则开始计数。根据技术值来判断是点按、双击还是长按。
这个可以用定此磨核时器来做,比如检查某键,按键时间超过2秒后一个变量开始累加知道键释放为止。实现森掘方法如下:#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint v=0,time=0
sbit key=P1^0
void t0isr() interrupt 1
{
TH0=(65536-50000)/256
TL0=(65536-50000)%256
time++
if((key==0)&&(time>40)v++ //如果按键时间超过2秒且键未释放,变量+1
if(key==1)time=0 //如果键释放,时间游卖复位
}
main()
{
TMOD=0x01
TH0=(65536-50000)/256
TL0=(65536-50000)%256
TR0=1
ET0=1
EA=1
while(1)
}
在你的程序中,else {strcpy(string1,string2)对应的语句是if (strlen(string1)>strlen(string3))printf("the largest string is %s",string1),而没派如慎有对应到if(strlen(string1)>strlen(string2))。
当你输入a ab abc时,因为不符合if(strlen(string1)>strlen(string2)),所以程序直接挑到了if (strlen(string1)>strlen(string3)) printf("max=%s",string1),当然这个条件同样也不符合,所以程序什么也不用输出。橡脊
解决方法也很简单,在你的程序加尘敬一对括号即可。运行这个新程序就能输出结果了,改后程序如下:
#include<stdio.h>
#include<string.h>
main()
{char string1[40],string2[30],string3[49]
printf("Enter string1 and string2 string3:")
scanf("%s%s%s",string1,string2,string3)
if(strlen(string1)>strlen(string2))
{ if (strlen(string1)>strlen(string3))
printf("the largest string is %s",string1)}/*在这里加了大括号*/
else {strcpy(string1,string2)
if (strlen(string1)>strlen(string3))
printf("max=%s",string1)
else printf("the largest string is %s",string3)
}
getch()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)