Re: Newbie questions (conditional operator, cin >> n...)
On Jun 29, 12:42 pm, "Army1987" <please....@for.it> wrote:
"Erik Wikstr=F6m" <Erik-wikst...@telia.com> ha scritto nel messaggionews:=
VjQgi.3079$ZA.1428@newsb.telia.net...
On 2007-06-28 16:29, Army1987 wrote:
I am a newbie to C++ (altough I already know some C). I've tried to
implement the TPK algorithm.
[snip code]
If something which can't be interpreted as a double is
input, std::cin >> array[i] leaves array[i] uninitialized,
and doesn't discard garbage. How can I check if it
succeeds? Since the cascading style can be used, I guess
std::cin >> array[i] evalues to std::cin itself, so I guess
using it in the controlling expression of an if statement
doesn't help. I could initialize all the elements of the
array to some strange value (eg. HUGE_VAL) and check if it
was unchanged, but is there a more elegant way?
The FAQ might help you:
http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.3
Now I have this:
#include <iostream>
#include <ostream>
#include <cmath>
#include <limits>
const int size = 11;
const double max = 400.0;
double f(const double& t);
int main(void)
{
double array[size];
for (int i = 0; i < size; ++i)
while (!(std::cin >> array[i])) {
std::cerr << "Please insert a number: " << std::flush;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'=
);
}
for (int i = size - 1; i >= 0; --i) {
double y = f(array[i]);
std::cout << i + 1 << '\t';
if (y > max)
std::cout << "TOO LARGE\n";
else
std::cout << y << '\n';
}
return 0;
}
double f(const double& t)
{
return std::sqrt(std::fabs(t)) + 5.0 * t * t * t;
}
If I give the eof signal, the error is cleared and the program goes
on. That would cause an endless loop if the input is redirected to
a file. What are the <iostream> C++ equivalents of feof() and
ferror()?
There is no real direct equivalent. Basically, once input has
failed, you can more or less test why:
if ( stream.bad() ) {
// Hard error...
} else if ( ! stream.eof() ) {
// Format error...
} else {
// End of file has been seen (but they might
// also be a format error).
}
Note that this checking should only be done once input has
failed, i.e. if stream.fail() is true (or if conversion to void*
yields a null pointer, or if ! returns true).
--
James Kanze (Gabi Software) email: james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34