[英]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.