0

键盘坏了,所以输入数字 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;
    }
}
4

3 回答 3

1

该错误在 containsDigit 函数中。试试这个:

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

您必须使用==而不是=. 你实际上也不需要number在那里争论。

也可以进行一些优化。请自己看(这是你的作业)并考虑重复的代码。

于 2012-10-23T00:29:14.763 回答
0

由于这看起来像家庭作业,因此我不会为您做这件事,并给您以下提示:

看起来您并不清楚“第一个数字”是什么。是左数第一个(数百个)还是右数个(个数)?查看您的代码并告诉自己它的每个部分将如何回答我的问题。

与您的代码一样,是否有可能lowNumhighNum有多个不同的数字?number如何?在哪里发生了变化,lowNum以及highNum如何变化?

此外,为了扩展@Al Kepp 所说的内容:当你有这样的功能时,尝试用一些非常简单的输入来测试它,而不是直接假设它有效。这称为(或类似于)“单元测试”,它要求您将程序划分为简单、独立的单元并分别测试它们。像containDigit(999, 4)返回这样的简单呼叫true会敲响警钟。

说到警告,总是,总是尽可能多地编译。(例如-Wallfor gcc)这样做可能会警告您根本没有使用number内部参数这一事实containDigit

于 2012-10-23T00:30:56.383 回答
0

您的函数 containsDigit 有两个问题:

  1. 它不需要接收变量“number”,因为它不使用它
  2. 你想比较 == 而不是 =
于 2012-10-23T00:40:26.740 回答