破损的烤箱键盘

Broken Oven Keypad

本文关键字:键盘      更新时间:2023-10-16

键盘损坏,因此输入数字1、4和7不起作用。反过来,计算机输出下一个最低和下一个最高数字,其中1、4和7不是数字。

我的目标是使用布尔功能查看数字和输出TRUE,然后输出下一个最高数字和下一个最低数字。我很确定我要做的大部分需要做的事情,但这并没有解决。我输入了数字444,结果是443和445。谢谢您的帮助。

 #include <iostream>
 #include <conio.h>
 #include <cmath>
using namespace std;
bool containDigit(int number, int digit);
int main()
{
    int number, digit, lowNum, highNum;
cout<<"Enter a number between 1 and 999 for the oven temperature: ";
cin>>number;
//1st digit
digit = number / 100;
containDigit(number, digit);
if (containDigit(number, digit) == true)
{
    number = number - 100;
}
//2nd digit
digit = (number / 10) % 10;
containDigit(number, digit);
if (containDigit(number, digit) == true)
{
    number = number - 10;
}
//3rd Digit
digit = number % 10;
containDigit(number, digit);
if (containDigit(number, digit) == true)
{
    number = number - 1;
}
cout<<number<<endl;

getche();
return 0;
}
bool containDigit(int number, int digit)
{
    if ((digit == 1) || (digit == 4) || (digit == 7))
    {
        return true;
    }
    else
    {
        return 0;
    }
}

错误在containDigit函数中。尝试以下操作:

bool containDigit(int number, int digit) {
    if(digit == 1 || digit == 4 || digit == 7) return true;
    return false;
}

您必须使用==而不是=。另外,您实际上不需要number参数。

也可以进行几个优化。请自己看一下(这是您的作业),然后考虑重复的代码。

由于这看起来像功课,我会避免为您做并给您这些提示:

看来您对"第一位数"是什么并不清楚。是左侧(数百)还是右(一个)的第一个?查看您的代码,并告诉自己它如何回答我的问题。

lowNumhighNum是否有可能使用代码与number具有多个数字不同?如何?lowNumhighNum在哪里更改?

如何?

另外,要扩展@Al Kepp所说的话:当您具有这样的函数时,请尝试使用一些非常简单的输入来测试它,而不是直接假设它有效。这称为(或类似于)"单位测试",这决定您将程序分为简单,独立的单位并分别测试。一个简单的呼叫,例如 containDigit(999, 4)返回 true会响应警告铃。

谈到警告,总是,始终与您所能忍受的尽可能多的一起编译。(例如gcc-Wall)这样做可能已经警告您您根本不使用number的参数containDigit

您的函数包含两个问题:

  1. 它不需要接收变量"数字",因为它不使用它
  2. 您想与==非=
  3. 进行比较