2012-10-23 61 views
0

鍵盤被打破所以輸入數字1,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; 
    } 
} 
+1

你能告訴我們什麼錯?你面臨的具體問題是什麼? – Clark

+2

你會想要養成更詳細地指定問題的習慣。你怎麼知道它不工作?你看到了什麼樣的結果? –

+0

另外:我很感謝你在指定'家庭作業'標籤時的誠實,但[你不必這樣做](http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now -officially棄用)。 –

回答

0

因爲這看起來像功課,我將這樣做是爲了避免你,給你這些提示:

看起來你不是什麼「第1位」非常清晰。它是從左邊(數百)還是右邊(第一個)開始的第一個?看看你的代碼,並告訴你自己的每個部分如何回答我的問題。

lowNumhighNum是否有可能有多於一個數字不同於number與您的代碼,因爲它是?怎麼樣? lowNumhighNum在哪裏變了,怎麼樣?

此外,擴大什麼@Al Kepp說:當你有一個這樣的功能,嘗試用一些非常簡單的輸入值來測試它,而不是直接從假設它的工作原理。這稱爲(或類似於)「單元測試」,它指示您將程序分成簡單的獨立單元並單獨測試。一個簡單的電話如​​返回true會響起警鐘。

說到警告,始終,總是編譯儘可能多的,你可以站立。 (例如,用於gcc-Wall)做這樣的可能已經警告過你的,你沒有使用參數numbercontainDigit在所有的事實。

+0

第一位數字是最左邊的數字,第二位數字是中間數字等。 lowNum和highNum不可能有多於一位的數字,但我找不到問題。我知道這就是阻止我的程序運行的原因,而且我一直在頭腦中徘徊。主要功能中的lowNum和highNum通過減少或增加數字來改變。如果我更換了'lowNum = number - 100; \t \t highNum = number + 100;'代碼只用'number = number - (10 *(WHATEVER DIGIT PLACE IT'S IN))' – user1742419

+0

我輸入444得到333,這是有效的。但是,我似乎無法讓它與lowNum和highNum一起工作。 – user1742419

+0

看看「第一位數」部分。它檢查哪個數字?它改變了哪個數字? – aib

1

該錯誤在containsDigit函數中。試試這個:

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

必須使用==,而不是=。 另外你實際上並不需要number參數。

也有可以做一些優化。請自己看看(這是你的作業),並考慮重複的代碼。

+0

還有一個問題,如果條件不正確,函數不會返回值。這意味着_anything_可能會被返回,有時它可能是「真實的」,有時是「錯誤的」。如果該函數不應該做其他任何事情,我建議改爲'return(digit == 1 || digit == 4 || digit == 7);'。 –

+0

J.P.你是對的。糾正。 (我把它放在兩行上,因爲這樣對初學者來說它的可讀性更好。) –

+0

我將我的代碼更改爲 'if((digit == 1)||(digit == 4)||(digit == 7 )) { return true; else { return 0; }' – user1742419

0

你的功能containDigit有兩個問題:

  1. 它不應該需要接受變量「數」,因爲它不使用它
  2. 你想比較==不是=