program skips through all of the array inputs
ztein (35) Mar 21, 2010 at 2:16pm UTC
Writing a program that reads up to 10 donation values into an array of double and must terminate input on non-numeric input. It should also report the average of the numbers.
The problem is it only reads 1 input and then shows me the average of zero.
Plus if I type large numbers like 50 or higher it crashes. But if I type in say 10 it just proceed to the average calculations and skips all of the other 9 array inputs to be performed.
The code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#include <iostream>
using namespace std;
const int Size = 10;
int main()
{
double * donation = new double [Size];
double sum = 0;
for (int i = 0; i < Size; i++)
{
cin >> donation[i];
if (!double (isdigit(donation[i])))
break ;
else
{
sum += donation[i];
continue ;
}
}
cout << "The average is: " << sum/Size << endl;
delete [] donation;
system("pause" );
return 0;
}
Last edited on Mar 21, 2010 at 2:16pm UTC
mcleano (733) Mar 21, 2010 at 2:16pm UTC
On line 12 you need (!cin && !(isdigit(donation[i])))
ztein (35) Mar 21, 2010 at 2:16pm UTC
Worked, but if I type in a non-numeric input like say character "k" the program crashes:
Debug Assertion Failed!
Program:...
File: f:\dd\vctools\crt_bld\self_x86\crt\src\isctype.c
Line: 56
Expression: (unsigned)(c + 1) <= 256
...
Could it be because of the type-cast from int to double on Line 12?
mcleano (733) Mar 21, 2010 at 2:16pm UTC
What do you mean by program crashes? When I type in "k", the program does what it's supposed to do: end by outputting "The average is 0".
ztein (35) Mar 21, 2010 at 2:16pm UTC
Strange I get the error mentioned above.
firedraco (2623) Mar 21, 2010 at 2:16pm UTC
isdigit() takes a char and returns a bool...in this case it doesn't make sense to do it at all. Just check for !cin and you should be fine.
ztein (35) Mar 21, 2010 at 2:16pm UTC
Got it.
Thanks.
This topic is archived - New replies not allowed.