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

C 处理来自键盘的用户输入时出现逻辑错误,c,embedded,C,Embedded,首先,这是家庭作业。我正在努力做到以下几点: 用户应该能够输入一个或两个数字的解决方案与正确的标志 我正在为飞思卡尔HCS12微控制器编程。因此,我不能使用任何C库 我创建了下面的函数来从键盘一次一个地抓取用户输入。然后,我的目标是将其打印到LCD上,并等待用户按下下一个键(如果有)。如果用户按下另一个数字,则我将其连接到上一个数字。我不必进行错误检查,因此我可以预期用户输入的数字不会超过两个 在代码中,如果用户按14,我返回一个负数 我的问题是,对于我最终保存在'NumberRentered'

首先,这是家庭作业。我正在努力做到以下几点:

用户应该能够输入一个或两个数字的解决方案与正确的标志

我正在为飞思卡尔HCS12微控制器编程。因此,我不能使用任何C库

我创建了下面的函数来从键盘一次一个地抓取用户输入。然后,我的目标是将其打印到LCD上,并等待用户按下下一个键(如果有)。如果用户按下另一个数字,则我将其连接到上一个数字。我不必进行错误检查,因此我可以预期用户输入的数字不会超过两个

在代码中,如果用户按14,我返回一个负数

我的问题是,对于我最终保存在'NumberRentered'变量中的数字,用户按的不是

下面是我的代码:

 //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
//此方法将接受用户输入并将其显示到LED
int processAnswer(void)
{
int sign;//若符号保持为零,则用户输入的数字为正
整数计数器;
int NEGFALG;
NumberRentered=0;
符号=0;//若符号保持为零,则用户输入的数字为正
计数器=0;
negFlag=0;
//程序将继续查询某个键,直到按下某个键为止
//如果未按下任何键,则数字0x1F是在getKey()例程中分配的数字
inKey=0;
而(1){
inKey=getkey();
keyrelease();//检查密钥是否已释放
如果(inKey==15){
打破
}
如果(inKey==0x1F){
持续
}
如果(inKey!=14&&inKey!=0x1F){
计数器++;
}
如果(inKey!=14&&counter==2){
numberEntered=numberEntered*10;
numberEntered=numberEntered+inKey;
显示编号(已编号);
}
如果(inKey!=14&&numberEntered<10){
NumberRentered=inKey;
显示编号(已编号);
}
如果(inKey==14){
如果(negFlag==0){
命令(0x86);
印刷品(“-”);
符号=1;
negFlag=1;
}
持续
}
}//while循环结束
//如果用户按下“C”键,则删除输入
//if(inKey==12)//如果用户想要删除最新的输入
// {
////命令(0x85);//将光标设置为第一行的地址0x05
////打印(0x00);//将清除以前的输入
////命令(0x84);
////打印(0x00);
//numberEntered=退格(numberEntered);
// }
//从用户返回最终答案
如果(符号==1)
{
numberEntered=-numberEntered;
}
返回编号为RETURNETERED;
}//进程结束应答函数

您需要将结构组织成一个循环,我确信其中存在缺陷,但您可以解决它们-类似于:

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;

你是在问为什么你会陷入困境,还是在建议如何重新格式化以便处理一个数字?因为在第二次调用
getkey
后,在第二次循环中调用了
displayNumber
,所以您只能处理两个键,如果只按下一个键,我希望您能给出处理一个键的建议,同时也能处理两个键。所以,我的目标是,如果用户按一个数字,然后按F键,那么我将返回那个单个数字。如果用户输入两位数字,则我返回该数字。我的代码无法正确处理一位数的输入。谢谢你的意见。从昨天开始,我已经更改了代码,但仍然有bug。我将继续调试它。在我的processAnswer()的最终代码中没有bug,它在我的代码的其他地方。