2017-01-20 30 views
3

我是新來的函數,我真的想了解它們是如何工作的,我的老師給了我們一個問題,我們通過一個數字來傳遞函數在1-12範圍和函數然後打算做這個數字的時間故事,所以我要求用戶輸入一個數字,如果數字小於1且大於12則退出,否則將該數字傳遞給該函數,然後使用for循環爲我做乘法(據我所知),但似乎沒有發生?毫無疑問,我正在做一些非常愚蠢的事情,任何幫助都非常感激。與C++中的函數相乘

#include <iostream> 
using namespace std; 

int TimesTables (int num); 

int main(int argc, const char * argv[]) { 
    int number; 
    cout << "enter a number to multiply by, with a range of 1-12: "; 
    cin >> number; 
    if (number < 1 && number > 12) 
     return EXIT_FAILURE; 
    else { 
     int tables = TimesTables(number); 
     cout << tables; 
    } 
    return 0; 
} 
int TimesTables (int num) { 

    for (int i = 0; num <=12; i ++) 
     num = num * i; 
    return num; 
} 
+4

這聽起來像你可能需要學習如何使用調試器來遍歷代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

回答

1
for (int i = 0; num <=12; i ++) 
    num = num * i; 

這裏i從0開始,所以你後來做乘法任何不影響結果(num)。此外,你想要去的從1到12,所以你應該從0,終點爲12開始 - 1,或12

1和完成時間等,改變這種:

for (int i = 0; num <=12; i ++) 

本:

for (int i = 1; i <=12; i ++) 

因爲要停止時i達到12,不numi的櫃檯!

+1

感謝您的幫助 – Dean

+0

不客氣@Dean。順便說一句,沒有什麼可怕的錯誤,你正在學習,所以很高興能夠問 - 這就是爲什麼我提高了你的想法,因爲我在那裏看到了一些努力!我還用一個簡單的初學者的調試技術更新了我的答案,它可以幫助你下次! PS - 不要忘記*接受*答案。 – gsamaras

+1

此代碼不起作用,gsamaras。但是,如果你已經運行過,你自己可以看到。 –

4

運行從0 i是要設定到num 0,因此之後的任何乘法。

你的循環也相當可疑。你爲什麼要檢查num <= 12而不是i <= 12

應該不是你的循環採取的形式

for (int i = 1; i <=12; i ++){ 
    // Print num * i 
    cout << num * i; 
} 
// There's no need to return anything back to the caller 
+0

非常感謝你,真是愚蠢的錯誤我的部分,但如果我不返回任何東西,然後我得到錯誤「控制達到非無效功能」我想我會需要一個回報?特別是因爲我試圖將num返回到main並輸出結果 – Dean

+0

我認爲返回'num'會很好,因爲這是他們的老師指示他們做的事情,所以它與課程的流程有關。順便說一句,你的答案似乎比我的早一點,所以我更新了一下,使它有點不同於你的答案。 +1。 – gsamaras

+0

現在,我執行程序,它只是返回一個錯誤,並顯示我所有的指針位置?虐待它更多一些,並試圖解決它,再次感謝您的幫助球員,非常感謝! – Dean