C语言 在x和y变量中存储数字键盘键输入

ffx8fchx  于 2023-02-18  发布在  其他
关注(0)|答案(2)|浏览(190)

我有一个外部数字小键盘,有0-9的数字和A-D的字母。
我想把x和y中0-9的数字存储为坐标。当我按A(等式10)时,我想画一个点。
问题是我不知道如何在x中存储第一个键,在y中存储第二个键。只要我按下一个键,它就会给x和y分配相同的数字。
我试过很多不同的if语句,但它总是给x和y赋值相同的数字。

int counter=0;
numPad[16]={1,4,7,14,2,5,8,0,3,6,9,15,10,11,12,13};

          if(numPad[key]<10){
             x=numPad[key];  
             x*=16;
             counter++;
          }
          if(counter>0 && numPad[key]<10){
             y=numPad[key];  
             y*=8;            
          }
          if(numPad[key]==10){
             LCD_DrawPoint(x,y,WHITE);
             counter=0;     
          }
yqyhoc1h

yqyhoc1h1#

设置x和y的if语句和画点的if语句是互斥的。if(numPad[key] < 10)if(numPad[key] == 10)不能同时为真。我不知道你为什么要做这样的比较,但我认为这是为了将最大可能输入值限制在9或其他值。在下面的例子中,我们将numPad[key]的最大可能值限制在9,并将其赋给X和Y。然后画出点。计数器在这里是没用的,但我把它留了下来,因为你在原始代码中有它。

int counter = 0;
numPad[16] = { 1,4,7,14,2,5,8,0,3,6,9,15,10,11,12,13 };

int someValue = numPad[key];

if(someValue > 9) {
    someValue = 9;
}

x = someValue * 16;
y = someValue * 8;  

LCD_DrawPoint(x,y,WHITE);
counter=0;

你可以提供一个最低限度的可验证的例子下一次,因为这将使我们能够帮助你更好。

zfciruhq

zfciruhq2#

如果没有提供足够的代码,那些试图提供帮助的人可能会误解,而不是适当地“填空”。

int x = 0, y = 0, counter = 0; // is all this contained inside one function?

int numPad[16] = { // layout increases reader comprehension
     1,  4,  7, 14,
     2,  5,  8,  0,
     3,  6,  9, 15,
    10, 11, 12, 13
};

for( ;; ) {
    int key = scan_keyboard() // Not provided by OP

    int value = numPad[ key ]; // translate

    if( value < 10 ) {
        // alternately assign scaled low values to x or y
        if( !counter )
            x = 16 * value;
        else
            y = 8 * value;
        counter = !counter;
    }
    else if( value == 10 ) {
        LCD_DrawPoint( x, y, WHITE );
        x = y = counter = 0; // reset (excessive caution)
    }
}

注意if/else的用法。

相关问题