2016-04-08 10 views
2

Ich bin Anfänger in C++, und ich habe eine Frage über einen einfachen Summencode in C++.Einfache Array-Summe in C++

Hier ist mein Code:

#include <cmath> 
#include <cstdio> 
#include <vector> 
#include <iostream> 
#include <algorithm> 
using namespace std; 


int main() 
{ 
    int n; 
    int sum; 
    int arr_i = 0; 

    cin >> n; 
    vector<int> arr(n); 
    while (arr_i != n) 
    { 
     cin >> arr[arr_i]; 
     sum += arr[arr_i]; 
     //cout << sum << endl; 
     if (arr_i == n - 1) 
      cout << sum; 
     arr_i++; 
    } 
    return 0; 
} 

Die Ausgabe druckt nicht die richtige Antwort ohne „cout < < Summe“ vor der, wenn die Bedingung.

Wie kann ich dieses Problem lösen?

+0

Sie brauchen nicht 'cmath.h' für eine einfache Summe aufzunehmen. –

+2

@ThomasMatthews - Er muss sie auch nicht in einen Vektor setzen. Alles, was er braucht, ist Iostream. Er beginnt C++. Nit: Es ist entweder 'math.h' oder' cmath', nicht 'cmath.h' –

+0

... Wenn Sie zufällig in C++ 14 sind, wäre ein einzeiliges Äquivalent der while-Schleife' cout < lifebalance

Antwort

7

Sie vergessen sum auf 0.

int sum = 0; 
+0

Danke, das funktioniert! – KuneTail

1

Wie die vorherigen Beitrag erwähnt zu initialisieren, Summe nicht auf 0 In Bezug auf die bewährten Verfahren und Designs eine gute Idee alle Variablen zu initialisieren initialisiert wurde, die geändert werden innerhalb einer Schleife direkt vor dem Schleifenkörper, so dass jemand, der den Code liest, den Kontext Ihrer Variablen leicht erfassen kann.

int main() 
{ 
    int n; 
    int sum; 
    int arr_i; 

    cin >> n; 
    vector<int> arr(n); 

    sum = 0; 
    arr_i = 0; 
    while (arr_i != n) 
    { 
     cin >> arr[arr_i]; 
     sum += arr[arr_i]; 
     //cout << sum << endl; 
     if (arr_i == n - 1) 
      cout << sum; 
     arr_i++; 
    } 
    return 0; 
} 

oder wie ich es vorziehen, eine „für“ Schleife ...

int main() 
{ 
    int n; 
    int sum; 
    int arr_i; 

    cin >> n; 
    vector<int> arr(n); 

    for (sum = 0, arr_i = 0; arr_i != n; arr_i++) 
    { 
     cin >> arr[arr_i]; 
     sum += arr[arr_i]; 
     //cout << sum << endl; 
     if (arr_i == n - 1) 
      cout << sum; 
    } 
    return 0; 
} 
+0

Noch besser, initialisieren Sie sie bei der Deklaration und reduzieren Sie den Gültigkeitsbereich der Variablen. – Jarod42

+0

@ Jarod42 Guter Punkt. Ja, ich wollte nicht zu sehr von seinem ursprünglichen Beitrag abweichen, aber definitiv deklarieren und initialisieren die Variable in einem Block des Codes, wo es nur verwendet wird, ist noch besser. Also wäre ein "für (int Summe = 0; int array_i = 0; arr_i! = N; arr_i ++)" in diesem Fall am besten. –

+0

Eine for-Schleife wäre eigentlich die bevorzugte Methode, da Sie wissen, wie oft die Schleife wiederholt wird, weil der Benutzer "n" mal Iterationen eingeben muss. Obwohl eine while-Schleife vertretbar ist, erscheint eine for-Schleife besser geeignet. – user2277872