简体   繁体   English

处理来自键盘的用户输入时出现逻辑错误

[英]Logic error in processing user input from a keypad

First of all this is homework. 首先,这是家庭作业。 I am trying to do the following: 我正在尝试执行以下操作:

The user should be be able to input one or two digit number solution with the proper sign. 用户应能够输入带有正确符号的一两位数字解决方案。

I am programming a Freescale HCS12 micro controller. 我正在编写飞思卡尔HCS12微型控制器。 So, I cannot use any of the C libraries. 因此,我不能使用任何C库。

I created the following function to grab user input from a keypad one at a time. 我创建了以下功能,一次可以从键盘上获取用户输入。 Then, my goal is to print it to the LCD, and wait for the user to press the next key, if any. 然后,我的目标是将其打印到LCD上,并等待用户按下下一个键(如果有)。 If the user presses another number, then I concatenate it to the previous number. 如果用户按下另一个数字,则我将其连接到先前的数字。 I don't have to do error checking, so I can expect that the user will not input more than two numbers. 我不必进行错误检查,因此我可以期望用户输入的数字不会超过两个。

In the code, if the user presses 14, I return a negative number. 在代码中,如果用户按14,则返回一个负数。

My problem is that for the number I finally save in the 'numberEntered' variable is not what the user pressed. 我的问题是,对于最终保存在“ numberEntered”变量中的数字,用户所按的不是。

Below you will find my code: 在下面,您将找到我的代码:

 //this method will take user input and display it to LED
  int processAnswer(void)
  {
    int sign;  //if sign remains zero, then number entered by user is positive
    int counter;
    int negFlag;
    numberEntered = 0;
    sign = 0;  //if sign remains zero, then number entered by user is positive
    counter = 0;
    negFlag =0;
   //Program will continue to query for a key until someting is pressed
   //The number 0x1F is a number assigned in getKey() routine if no key is pressed
      inKey = 0;
      while(1){
        inKey = getkey();
        keyrelease(); //checks if key is released
        if(inKey == 15){
          break;
        }
        if(inKey == 0x1F){
          continue;
        }

        if(inKey != 14 && inKey != 0x1F ){
          counter++;

        }
        if(inKey != 14 && counter == 2 ){  
          numberEntered = numberEntered * 10;
          numberEntered = numberEntered + inKey;
          displayNumber(numberEntered);

        }

        if(inKey != 14 && numberEntered < 10){
          numberEntered = inKey;
          displayNumber(numberEntered);
        }
        if(inKey == 14 ){

          if(negFlag==0){

          Command(0x86);
          Print('-');
          sign = 1;
          negFlag = 1;
          }

          continue;
        }

      }//end of while loop


           //if user pressed key 'C', then delete input
        // if(inKey == 12) //if the user wants to delete latest input
        // {

        //  //Command(0x85); //sets cursor to address 0x05 of first line
        //  //Print(0x00);  //will clear previous input
        //  //Command(0x84);
        //  //Print(0x00);
        //  numberEntered=backspace(numberEntered);

        // }


  //return final answer from user
      if(sign == 1)
      {
        numberEntered = -numberEntered;
      }
      return numberEntered;
  }//end of processAnswer function

You need to structure into one loop, I'm sure there are bugs but you can work them out - something like: 您需要将其结构化为一个循环,我确定有错误,但是您可以解决它们-类似:

sign = 0;
number = 0;
while (inKey == 0x0F) {
   inkey = getKey();
   keyRelease();

   if (inKey == 15)
      break;
   if (inKey == 14)
      sign = 1;
   else {
       number += inKey;
       displayNumber(number);
       number = number*10;
   }
 }
 if (sign && number) {
    number = ~number +1;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM