2014-10-11 24 views
0

我試圖將這個問題分解爲函數,但是我的問題是,當我打印出結果時,總會得到不同的總和,正數和負數。使用函數的正整數之和。

有人可以給我一個提示嗎?

編寫一個程序,讀取十個整數並輸出其中所有正數的和。程序應忽略小於或等於0的所有數字。程序還應顯示正數的計數和負數或零的計數。

#include <iostream> 

using namespace std; 
void input(int number, int positiveCount, int negativeCount, int sum); 
void output(int positiveCount, int negativeCount, int sum); 

int main() 
{ 
int number, positiveCount, negativeCount, sum; 
input(number, positiveCount, negativeCount, sum); 
output(positiveCount, negativeCount, sum); 


return 0; 
} 
void input(int number, int positiveCount, int negativeCount, int sum) 
{ 
cout << "Enter 10 integers: " << endl; 
for (int i = 0; i < 10; i++) 
{ 

    cin >> number; 
    if (number > 0) 
    { 
     positiveCount++; 
     sum = sum + number; 
    } 
    else 
    { 
     negativeCount++; 
    } 
} 


} 
void output(int positiveCount, int negativeCount, int sum) 
{ 
    cout << sum << endl; 
    cout << positiveCount << endl; 
    cout << negativeCount << endl; 

} 
+0

你能否詳細說明,問題出在哪裏 – 2014-10-11 14:19:44

回答

2

您的input()函數需要引用它的參數,以便它可以修改它們。而且你需要在開始時將所有這些int整數初始化爲0或者它們包含垃圾。

+0

沒有初始化它是UB,不僅僅是垃圾。 – Deduplicator 2014-10-11 14:24:25

+0

@Deduplicator:有點。我認爲UB將被第一次改變阻止,爲'input()'函數使用引用而不是傳值。這依賴於這樣的想法,即採取引用相當於採用它的地址,這就排除了UB並給出了一個不確定的值。看到這裏:http://stackoverflow.com/questions/11962457/why-is-using-an-uninitialized-variable-undefined-behavior-in-c - 但是我是否正確僅僅通過引用傳遞變量節省我們在這裏,我不確定,並且程序在沒有初始化的情況下是錯誤的。 – 2014-10-11 14:32:53

+1

鏈接的問答用於C,而不是C++。在C++中,使用不確定值是直UB。不需要從無記憶的變量來保持。 (你是對的,這並沒有改變這個程序是否正確的問題,只是它的錯誤有多嚴重。) – Deduplicator 2014-10-11 14:36:59

1

您在input()函數中完成的操作會丟失,因爲變量的作用域僅在函數內部。

將參數傳遞給input()函數時,您需要使用指針或引用,以免使用本地副本。

在使用指針時,您還需要進行解引用。 並在傳遞給函數之前將該變量初始化爲0。

0

因爲程序中存在嚴重錯誤。您可以在函數main()中定義四個局部變量,並在調用函數input()時按值發送它們。該功能不會修改功能main()中定義的變量。它只是修改他們的副本。當您不在功能input()中時,這些副本將被刪除。

爲了修改它們,你應該使用參考:

void input(int &number, int &positiveCount, int &negativeCount, int &sum); 

但它沒有任何意義的功能main()創建四個整數,並在功能input()output()發送。您可以在input()中創建四個局部變量,然後在此函數中打印它們。那麼你不應該定義函數output(),你可以在你的代碼中刪除它。即你應該修改你的程序。

0

在你的任務有寫的是:

編寫一個程序,讀取10個整數,輸出其中 所有的正數的總和

所以沒有必要寫這個簡單的程序單獨的功能。它可以像

#include <iostream> 

int main() 
{ 
    const size_t N = 10; 

    std::cout << "Enter " << N << " integers: "; 

    size_t i = 0, count = 0; 
    long long sum = 0; 

    int num; 

    for (; i < N && std::cin >> num; i++) 
    { 
     if (num > 0) 
     { 
      sum += num; 
      ++count; 
     } 
    } 

    std::cout << "You have entered " << count << " positive numbers\n" 
       << "and " << i - count << " negative numbers or seroes\n" 
       << "Sum of positive numbers is " << sum << std::endl; 

    return 0; 
} 

如果你想編寫單獨的函數,然後例如函數的輸入可以被聲明爲

long long input(size_t &positive_count, size_t &negative_count); 

long long input(size_t &total_count, size_t &positive_count); 

long long input(size_t *positive_count, size_t *negative_count); 

long long input(size_t *total_count, size_t *positive_count);