program skips through all of the array inputs
ztein (35)
Oct 31, 2009 at 5:22pm 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 Oct 31, 2009 at 5:23pm UTC
mcleano (922)
Oct 31, 2009 at 6:36pm UTC
On line 12 you need (!cin && !(isdigit(donation[i])))
ztein (35)
Oct 31, 2009 at 8:18pm 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 (922)
Nov 1, 2009 at 7:00pm 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)
Nov 2, 2009 at 7:43pm UTC
Strange I get the error mentioned above.
firedraco (4744)
Nov 2, 2009 at 11:57pm 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)
Nov 3, 2009 at 4:43am UTC
Got it.
Thanks.
Topic archived. No new replies allowed.