0

キーパッドが壊れているため、入力番号 1、4、および 7 が機能しません。次に、コンピューターは次に小さい数字と次に大きい数字を出力します。ここで、1、4、および 7 は数字ではありません。

私の目標は、ブール関数を使用して数字と出力をチェックアウトし、次に高い数値と次に低い数値を出力することです。やるべきことのほとんどをやったと確信していますが、うまくいきません。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

バグは、containDigit 関数にあります。これを試して:

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

関数containDigitには2つの問題があります。

  1. 変数「number」は使用しないため、受け取る必要はありません。
  2. ==ではなく=と比較したい
于 2012-10-23T00:40:26.740 に答える
0

これは宿題のように見えるので、私はあなたのためにそれをするのを控えて、これらのヒントを与えます:

「1桁目」が何であるかがはっきりしていないようです。左から1番目(数百)ですか、それとも右(1)から1番目ですか?コードを見て、その各部分が私の質問にどのように答えるかを考えてみてください。

そのままのコードとは異なる桁が複数ある可能性はありますlowNumか? どのように?どこで、どのように変更されましたか?highNumnumberlowNumhighNum

また、@Al Kepp の発言を拡張するには、次のように述べています。これは「単体テスト」と呼ばれます (またはそれに似ています)。これは、プログラムを単純な独立した単位に分割し、それらを個別にテストすることを指示します。containDigit(999, 4)戻るなどの単純な呼び出しは、true警告ベルを鳴らしたでしょう。

警告について言えば、常に、耐えられる限り多くの警告をコンパイルしてください。(例: -Wallfor ) そのようにすると、内部gccのパラメーターをまったく使用していないという事実が警告される可能性があります。numbercontainDigit

于 2012-10-23T00:30:56.383 に答える