I am newbie to programming and I am trying to pass an array into a function and add all the elements together and return the sum. The problem is that I am getting a garbage value for the sum. I have researched on how to pass arrays to functions and I do not know if I’m supposed to use a pointer to pass arrays. I am not good with pointers anyways.
Here is my code
#include <cmath>
#include <cstdlib>
using namespace std;
float mean(int);
int sum(int ARRZO[5]);
int total;
int main()
{
int ARRZ[5];
char *inname = "example.txt";
ifstream infile(inname);
if (!infile) {
cout << "There was a problem opening file " << inname << " for reading." << endl;
return 0;
}
cout << "Opened " << inname << " for reading." << endl;
for(int i=0; i<11; i++)
{
while (infile >> ARRZ[i])
{
cout << "Value from file is " << ARRZ[i] << endl;
}
}
total=sum(ARRZ);
cout<<"the sum of the elements in the array is"<<total<<endl;
system("PAUSE");
return 0;
}
int sum(int ARRZO[])
{
int sumz=0;
for (int i=0; i<5; i++)
{
sumz+=ARRZO[i];
cout<<ARRZO[i];
}
cout<<sumz<<endl;
return sumz;
}
I’m not sure what you think this pair of nested loops is supposed to do:
But (as @aliexisdm pointed out) the inner loop reads the entire content of the file. What he didn’t (at least directly) point out is that you’re reading every one of those values into the first element of your array. Then you’re getting back to the outer loop, incrementing
i, and trying to read the file again — but since the stream’sfailbithas been set, all your subsequent attempts at reading are guaranteed to fail.After that, you add up the 5 items in the array, but since you haven’t read anything into 4 of them (and never initialized its contents) you end up with the last item you read from the file + 4 garbage values, giving still further garbage as the result (well, usually anyway — you really have undefined behavior, so the program could crash and burn instead, but with most current computers, you’ll just get some meaningless number).
I, however, would advise changing the program a bit more than just removing one loop and incrementing in the loop that’s left. Instead, I’d remove all the (explicit) loops, and make some attempt at making real use of what the standard library provides.
You can read the numbers from the file in one fell swoop:
Then you can sum them all with
std::accumulate:Finally, you can print out the result:
Since, however, you only read the values from the file to add them together, you don’t really need to store them at all. You could just add them together and print out the result:
The whole job reduced to one step…