Monday, February 24, 2014

comp.lang.c++ - 26 new messages in 8 topics - digest

comp.lang.c++
http://groups.google.com/group/comp.lang.c++?hl=en

comp.lang.c++@googlegroups.com

Today's topics:

* RICHARD LEAKEY IN PRISON -- THE THRINAXODON TIMES - 1 messages, 1 author
http://groups.google.com/group/comp.lang.c++/t/b39dd6c751c33948?hl=en
* Working with Large Values (double) - 9 messages, 5 authors
http://groups.google.com/group/comp.lang.c++/t/e42843c9cdf13724?hl=en
* hw to get started - 5 messages, 5 authors
http://groups.google.com/group/comp.lang.c++/t/1a1994fe83f96e2f?hl=en
* shared_ptr and unique_ptr related question - 1 messages, 1 author
http://groups.google.com/group/comp.lang.c++/t/ae1f30d2345574fe?hl=en
* implicit passing by reference - 7 messages, 6 authors
http://groups.google.com/group/comp.lang.c++/t/dddf6db3d26e03e4?hl=en
* IO problem - 1 messages, 1 author
http://groups.google.com/group/comp.lang.c++/t/1627ad3e27ed2570?hl=en
* Iterator pair as a function argument? - 1 messages, 1 author
http://groups.google.com/group/comp.lang.c++/t/d7a4099890dfa4ed?hl=en
* Flummoxed - Please Help! - 1 messages, 1 author
http://groups.google.com/group/comp.lang.c++/t/d4b5a6ac1e14e414?hl=en

==============================================================================
TOPIC: RICHARD LEAKEY IN PRISON -- THE THRINAXODON TIMES
http://groups.google.com/group/comp.lang.c++/t/b39dd6c751c33948?hl=en
==============================================================================

== 1 of 1 ==
Date: Sat, Feb 22 2014 5:47 pm
From: "TERMINATOR OF TALK.ORIGINS"


==================
> BREAKING NEWS!!!!
==================
>
RICHARD LEAKEY RECENTLY SENT TO PRISON AFTER BEING CAUGHT SCAMMING
MILLIONS OF YOUNG PEOPLE INTO THE SCAM OF EVOLUTION.
>
THRINAXODON, WHO WAS THE LEAD PROSECUTOR SAID THIS TO THE NY TIMES:


It strikes me silly that one of the world's leading
evolutionary charlatans finally get put into the place they deserve: PRISON

I've been trying FOR YEARS TO GET THESE BASTARDS (LEAKEY, DAWKINS, ETC.)
FOR YEARS INTO TOP-MAX PRISONS. ONE HAS FINALLY BEEN SENT, RICHARD
LEAKEY. May the rest of the charlatans fall? Who knows. But, this is a
warning to all con artists making a buck out of taking peoples souls
(e.g. evolutionary bullshit).
>
LEAKEY WAS SENTENCED TO THREE LIFE SENTENCES AND NO CHANCE OF BAIL.
THRINAXODON LED A MOB OF 3,000,000 PEOPLE TO THE PRISON, AND WE ALL
CHEERED WITH HAPPINESS THAT OUR KIDS WILL NO LONGER BE FORCED-FED BULLSHIT!
>
======================================
EVIDENCE THAT HUMANS LIVED IN THE DEVONIAN:

https://groups.google.com/group/sci.bio.paleontology/browse_thread/thread/6f501c469c7af24f#

https://groups.google.com/group/sci.bio.paleontology/browse_thread/thread/3aad75c16afb0b82#

====================================

http://thrinaxodon.wordpress.com/

===================================

THRINAXODON ONLY HAD THIS TO SAY:

"I..I...I...Can't believe it. This completely disproved Darwinian
orthodoxy."

===================================

THE BASTARDS AT THE SMITHSONIAN, AND THE LEAKEY FOUNDATION ARE ERODING
WITH FEAR.

===========================
THESE ASSHOLES ARE GOING TO DIE:
THOMAS AQUINAS;
ALDOUS HUXLEY;
BOB CASANVOVA;
SkyEyes;
DAVID IAIN GRIEG;
MARK ISAAK;
JOHN HARSHAM;
RICHARD NORMAN;
DR. DOOLITTLE;
CHARLES DARWIN;
MARK HORTON;
ERIK SIMPSON;
HYPATIAB7;
PAUL J. GANS;
JILLERY;
WIKI TRIK;
THRINAXODON;
PETER NYIKOS;
RON OKIMOTO;
JOHN S. WILKINS
===========================

THRINAXODON WAS SCOURING ANOTHER DEVONIAN FOSSIL BED, AND FOUND A
HUMAN SKULL, AND A HUMAN FEMUR. HE ANALYSED THE FINDS, AND SAW THAT
THEY WERE NOT NORMAL ROCKS. THESE WERE FOSSILIZED BONES. THEY EVEN HAD
TOOTH MARKS ON THEM. SO, THRINAXODON BROUGHT THEM TO THE LEAKEY
FOUNDATION, THEY UTTERLY DISMISSED IT, AND SAID, "We want to keep
people thinking that humans evolved 2 Ma." THRINAXODON BROUGHT HIS
SWORD, AND SAID, "SCIENCE CORRECTS ITSELF." RICHARD LEAKEY SAID, "That
is a myth, for people to believe in science." THRINAXODON PLANS TO
BRING DOOM TO SCIENCE, ITSELF.

============================

THRINAXODON IS NOW ON TWITTER

--
Thrinaxodon, the ultimate defender of USENET.





==============================================================================
TOPIC: Working with Large Values (double)
http://groups.google.com/group/comp.lang.c++/t/e42843c9cdf13724?hl=en
==============================================================================

== 1 of 9 ==
Date: Sun, Feb 23 2014 12:41 am
From: jacob navia


Le 22/02/2014 02:28, Robert Wessel a écrit :
> On Fri, 21 Feb 2014 13:14:58 -0800, Geoff <geoff@invalid.invalid>
> wrote:

>> Copeland is writing a check writing program, I think scientific
>> notation might not work in that case. :)
>
>
> Attempting to use FP to represent currency is fundamentally doomed to
> failure. I didn't see that that's what the OP was doing, but if it
> is, he should definitely reconsider, unless he doesn't actually care
> about the actual results (which may well be the case if this something
> like a homework assignment).
>

Writing a check of 10000.3e+34 dollars???????????

WOW, I think that goes even beyond the U.S. TOTAL debt!






== 2 of 9 ==
Date: Sun, Feb 23 2014 5:53 am
From: James Kanze


On Saturday, February 22, 2014 1:28:32 AM UTC, robert...@yahoo.com wrote:

> Attempting to use FP to represent currency is fundamentally doomed to
> failure.

That depends on what you are doing. If you're doing
risk analysis on futures contracts, for example, it's
perfectly appropriate (and you probably can't afford
the loss of performance a decimal solution would cost
you). After all, any rounding errors will be much
less than the variance of the Monte Carlo simulation
anyway.

If you're doing anything even closely related to
legally required bookkeeping, however (and I would
imagine writing checks comes into that providence),
then using machine floating point is probably illegal,
and could, in many jurisdictions, send you to jail.

Note that I say "machine floating point", and not just
FP. There's no problem with a well written decimal
floating point package here. For that matter, it's
possible to use machine floating point, *if* you scale
so that all actual values are exactly representable
whole numbers, and take the proper precautions. It's
anything but trivial, however, and I'd probably go
with a decimal package, even if I had to write it
myself, as being a lot simpler.

--
James




== 3 of 9 ==
Date: Sun, Feb 23 2014 5:57 am
From: James Kanze


On Friday, February 21, 2014 6:00:10 AM UTC, robert...@yahoo.com wrote:
> On Thu, 20 Feb 2014 17:25:50 -0700, mrc2323@cox.net (Mike Copeland)
> wrote:

> > How can I express a large value as a double? (e.g. 1000000.3) Whereas
> > this compiles and executes, when I try to convert it to a
> >string value it converts as a scientific string (e.g. "1e+006", not
> >"1000000.3"). I want to process all the characters of the value of the data
> >as a std::string. Or is there a way to convert the double to assure it's
> >not expressed in scientific notation? TIA

> Doubles are floating point and are inherently "in" scientific
> notation.

No. Scientific notation, like pratically all other text
formats, is base 10. None of the floating point formats I know
of that are in use today are base 10. And the way machine
floating point typically represents the exponent is not
scientific notation either.

> But if you've converted a double to a character format, you can
> usually specify a precision, if the default (commonly 6) is not what
> you want. With streams, for example, you can use std::setprecision().

Or just call `precision` on the stream itself. (I don't think
I've ever `std::setprecision()`.)

--
James




== 4 of 9 ==
Date: Sun, Feb 23 2014 5:59 am
From: James Kanze


On Friday, February 21, 2014 2:51:27 PM UTC, Scott Lurndal wrote:

> man 3 snprintf
>
> (Yes, it works fine in C++)

Funny, because it never worked "fine" in C. In C, you use it,
because there's not really anything else, but C formatted output
has to be one of the worst designs ever.

--
James




== 5 of 9 ==
Date: Sun, Feb 23 2014 6:26 am
From: ram@zedat.fu-berlin.de (Stefan Ram)


James Kanze <james.kanze@gmail.com> writes:
>No. Scientific notation, like pratically all other text
>formats, is base 10. None of the floating point formats I know
>of that are in use today are base 10. And the way machine

It seems the Windows GUI calculator programm uses base 10
(as other pocket calculators?), and also java.math.BigDecimal
uses base 10. C# has a decimal type: »decimal myMoney=300.5m;«.
C++ now has custom literals, so we might be able to copy this.
Maybe Mathematica / Wolfram Alpha uses decimal too.





== 6 of 9 ==
Date: Sun, Feb 23 2014 6:46 am
From: jacob navia


Le 23/02/2014 14:59, James Kanze a écrit :
> On Friday, February 21, 2014 2:51:27 PM UTC, Scott Lurndal wrote:
>
>> man 3 snprintf
>>
>> (Yes, it works fine in C++)
>
> Funny, because it never worked "fine" in C. In C, you use it,
> because there's not really anything else, but C formatted output
> has to be one of the worst designs ever.
>

Of course. For instance in the evil C language you use:

printf("0x%08x\n", x);

In the much more advanced C++ language you use:

std::cout << std::hex << std::setfill('0') << std::setw(8) << x <<
std::dec << std::endl;

Of course C has ONE of the worst designs. But C++ has THE WORST!

:-)

jacob




== 7 of 9 ==
Date: Sun, Feb 23 2014 10:09 am
From: woodbrian77@gmail.com


On Sunday, February 23, 2014 8:46:10 AM UTC-6, jacob navia wrote:
> Le 23/02/2014 14:59, James Kanze a écrit :
>
> > On Friday, February 21, 2014 2:51:27 PM UTC, Scott Lurndal wrote:
>
> >
>
> >> man 3 snprintf
>
> >>
>
> >> (Yes, it works fine in C++)
>
> >
>
> > Funny, because it never worked "fine" in C. In C, you use it,
>
> > because there's not really anything else, but C formatted output
>
> > has to be one of the worst designs ever.
>
> >
>
>
>
> Of course. For instance in the evil C language you use:
>
> printf("0x%08x\n", x);
>
> In the much more advanced C++ language you use:
>
> std::cout << std::hex << std::setfill('0') << std::setw(8) << x <<
>
> std::dec << std::endl;
>
> Of course C has ONE of the worst designs. But C++ has THE WORST!
>

We've discussed this a hundred times. They both have
weaknesses. The poor performance of iostream implementations
is on my list as far as the C++ weaknesses.

Brian
Ebenezer Enterprises - In G-d we trust.
http://webEbenezer.net




== 8 of 9 ==
Date: Mon, Feb 24 2014 3:32 am
From: Juha Nieminen


jacob navia <jacob@spamsink.net> wrote:
> Of course C has ONE of the worst designs. But C++ has THE WORST!

The C version is not type safe, cannot be expanded with new types, and
has poor abstraction, while the C++ version has all of those.

Just as an example of that, assume you have in one file

typedef int Integral;

and in another something along the lines of

void foo(Integral i)
{
printf("???", i); // What to put here?
}

If you put "%i" there, it will break if 'Integral' is ever changed to
a bigger or incompatible type.

With luck, the compiler will give you warnings for the format string
not matching the parameter types, so you can manually go and fix all
the instances. Excellent programming technique.

--- news://freenews.netfront.net/ - complaints: news@netfront.net ---




== 9 of 9 ==
Date: Mon, Feb 24 2014 4:04 am
From: ram@zedat.fu-berlin.de (Stefan Ram)


Juha Nieminen <nospam@thanks.invalid> writes:
>Just as an example of that, assume you have in one file
>typedef int Integral;

#include <iostream>
struct integer{ int value; void print(); };
void integer::print(){ ::std::cout << value; }
int main(){ integer i ={ 2 }; i.print(); }

#include <stdio.h>
struct integer
{ int value; void( * print )( struct integer * this ); };
void print( struct integer * this ){ printf( "%d", this->value ); }
int main(){ struct integer i ={ 2, print }; i.print( &i ); }






==============================================================================
TOPIC: hw to get started
http://groups.google.com/group/comp.lang.c++/t/1a1994fe83f96e2f?hl=en
==============================================================================

== 1 of 5 ==
Date: Sun, Feb 23 2014 1:20 am
From: erson212


Please can some 1 tell me hw to get started with c++, first tin to du




== 2 of 5 ==
Date: Sun, Feb 23 2014 7:12 am
From: Victor Bazarov


On 2/23/2014 4:20 AM, erson212 wrote:
> Please can some 1 tell me hw to get started with c++, first tin to du
>

Since C++ is an exact language (has a grammar, keywords that need to be
spelled correctly, and is case-sensitive), the first thing to do is to
*commit* to doing it and doing it *properly*. You can demonstrate that
you have achieved the first stage when you learn to use proper grammar,
syntax, punctuation in *all* that you write, *including* any posts on
Usenet. Can you do that?

V
--
I do not respond to top-posted replies, please don't ask




== 3 of 5 ==
Date: Sun, Feb 23 2014 9:49 am
From: woodbrian77@gmail.com


On Sunday, February 23, 2014 3:20:06 AM UTC-6, erson212 wrote:
> Please can some 1 tell me hw to get started with c++, first tin to du

Buy a book or two. Get access to at least one C++ compiler.
Linux makes it fairly easy to use several compilers. You're
also welcome to download the archive on my website;

http://webEbenezer.net/build_integration.html

I've been working on the software there since 1999.

I recall Jorgen mentioning in a similar question the need
to write and read a lot of software. That's right I suppose.


Brian
Ebenezer Enterprises - So far G-d has helped us.
http://webEbenezer.net




== 4 of 5 ==
Date: Sun, Feb 23 2014 10:36 am
From: ram@zedat.fu-berlin.de (Stefan Ram)


Victor Bazarov <v.bazarov@comcast.invalid> writes:
>On 2/23/2014 4:20 AM, erson212 wrote:
>>Please can some 1 tell me hw to get started with c++, first tin to du
>Since C++ is an exact language (has a grammar, keywords that need to be
>spelled correctly, and is case-sensitive), the first thing to do is to
>*commit* to doing it and doing it *properly*. You can demonstrate that
>you have achieved the first stage when you learn to use proper grammar,
>syntax, punctuation in *all* that you write, *including* any posts on
>Usenet. Can you do that?

»While sloppy writing does not invariably mean sloppy
thinking, we've generally found the correlation to be
strong -- and we have no use for sloppy thinkers.
If you can't yet write competently, learn to.«

Eric Raymond

http://www.catb.org/~esr/faqs/hacker-howto.html#skills4

»Besides a mathematical inclination, an exceptionally
good mastery of one's native tongue is the most vital
asset of a competent programmer.«

Edsgar Dijkstra

»I've found that some of the best [Software ]developers
of all are English majors. They'll often graduate with
no programming experience at all, and certainly without
a clue about the difference between DRAM and EPROM.

But they can write. That's the art of conveying
information concisely and clearly. Software development
and writing are both the art of knowing what you're going
to do, and then lucidly expressing your ideas.«

Paul Potts
http://praisecurseandrecurse.blogspot.com/2007/03/english-majors-as-programmers.html

»The narrative measures of conjunction use, event
content, perspective shift, and mental state reference
were significantly predictive of later Math scores.«

http://www.arts.uwaterloo.ca/%7Edoneill/papers/Storytelling%20and%20math.pdf

»I have never, ever, ever seen a great software developer
who does not have amazing attention to detail.«

http://www.softwarebyrob.com/articles/Personality_Traits_of_the_Best_Software_Developers.aspx





== 5 of 5 ==
Date: Mon, Feb 24 2014 4:20 am
From: guinness.tony@gmail.com


On Sunday, 23 February 2014 18:36:14 UTC, Stefan Ram wrote:
>
> »I've found that some of the best [Software ]developers
> of all are English majors. ...«
>
> Paul Potts

Now THAT's a very interesting correlation. Who would have
thought that high-ranking officers of our army would be
suited to be good software engineers?





==============================================================================
TOPIC: shared_ptr and unique_ptr related question
http://groups.google.com/group/comp.lang.c++/t/ae1f30d2345574fe?hl=en
==============================================================================

== 1 of 1 ==
Date: Sun, Feb 23 2014 6:10 am
From: James Kanze


On Saturday, February 22, 2014 1:28:19 AM UTC, somenath wrote:
> To get some understanding of shared_ptr and unique_ptr I wrote
> the following naive implementation of linked list.

> #include<memory>
> using namespace std;

> template <class T>
> class List {
> private:
> class ListItem {
> public:
> ListItem( T Val );
> shared_ptr <ListItem > Next;
> T Data;
> };

> shared_ptr< ListItem >Head;

> public:
> int CreateNode();
> List() {
> Head.reset();
> }
> void PushBack(T Val);
> void Dump();
> };

> template<class T>
> List<T>::ListItem::ListItem( T Val):Data(Val) {
> Next.reset();
> }

> template<class T>
> void List<T>::PushBack( T val)
> {
> unique_ptr<ListItem > NewItem (new ListItem(val));
> if (!Head ) {
> Head = move(NewItem);
> }
> else {
> shared_ptr<ListItem> Curr(Head);
> shared_ptr<ListItem> Prev(Head);
> while( (Curr) ) {
> Prev = Curr;
> Curr = Curr->Next;
> }
> Prev->Next = move(NewItem);
> }
> }

> template<class T>
> void List<T>::Dump() {
> shared_ptr<ListItem > Curr(Head);
> while ( Curr) {
> cout<<"Val = "<<Curr->Data<<endl;;
> Curr = Curr->Next;
> }
> }

> But I am not very clear of the correct uses of shared_ptr and
> auto_ptr yet.

Then don't use them. They're useful for some special cases; if
your use corresponds to one of those special cases, fine, but if
not, don't use them. Using them for memory contained in a
larger entity, like a list, is an anti-pattern.

Take a look at the implementations of the standard containers.
None of them use any classical smart pointers. (Most do use
private base classes to ensure correct destruction of partially
constructed objects. This is another technique, perhaps more
applicable to container classes in general.)

--
James





==============================================================================
TOPIC: implicit passing by reference
http://groups.google.com/group/comp.lang.c++/t/dddf6db3d26e03e4?hl=en
==============================================================================

== 1 of 7 ==
Date: Sun, Feb 23 2014 6:13 am
From: James Kanze


On Friday, February 21, 2014 5:42:57 AM UTC, Paavo Helde wrote:

> Do not take stackoverflow too seriously, the
> answers there are ranked by the person least qualified to judge the
> correctness.

You've noticed that too. The highest ranked answers are rarely
the correct ones.

--
James




== 2 of 7 ==
Date: Sun, Feb 23 2014 6:16 am
From: James Kanze


On Friday, February 21, 2014 11:44:54 AM UTC, Jorgen Grahn wrote:
> On Fri, 2014-02-21, Paavo Helde wrote:

> I tell my coworkers to avoid stackoverflow because of stuff like
> this.

It's harder to do if you work in an investment bank, where NNTP
is blocked by the firewall, as is Google Groups. (I have yet to
figure out the reasoning behind it, but it seems to be some
legal requirement, since it is univeral, at least in London
banks.)

--
James




== 3 of 7 ==
Date: Sun, Feb 23 2014 6:29 am
From: ram@zedat.fu-berlin.de (Stefan Ram)


James Kanze <james.kanze@gmail.com> writes:
>On Friday, February 21, 2014 5:42:57 AM UTC, Paavo Helde wrote:
>>Do not take stackoverflow too seriously, the
>>answers there are ranked by the person least qualified to judge the
>>correctness.
>You've noticed that too. The highest ranked answers are rarely
>the correct ones.

Read the post »Welcome Slashdot refugees!« of February 6 in
the newsgroup »comp.misc« and the following posts to witness
the return of Slashdot users to Usenet.





== 4 of 7 ==
Date: Sun, Feb 23 2014 1:10 pm
From: jerry.jeremiah@gmail.com


On Friday, February 21, 2014 6:42:57 PM UTC+13, Paavo Helde wrote:
>
> In C++ the function declarations specify exactly if the pass is by value or by reference. The people at stackoverflow probably have confused C++ with some other language. Do not take stackoverflow too seriously, the answers there are ranked by the person least qualified to judge the correctness.
>
> Cheers
>
> Paavo

I *knew* it was wrong. What I didn't know what that stackoverflow was so unreliable (I have had good luck until now)

Thanks very much for all the advice.

Jerry




== 5 of 7 ==
Date: Sun, Feb 23 2014 3:14 pm
From: Paavo Helde


jerry.jeremiah@gmail.com wrote in
news:65747709-69b4-44bb-8494-63b1a68366c5@googlegroups.com:

> What I didn't know what that stackoverflow was
> so unreliable (I have had good luck until now)

I have asked some questions myself there, and the system soon insisted me
me to select THE answer. How would I know which, if any, of the proposed
third-party libraries is of any good? It becomes clear only after a couple
of years of eperience, possibly only after when the poor
customers^H^H^H^H^H^H^H^H^Hbeta-testers have filed their multi-threading
and other bug reports.

Cheers
Paavo








== 6 of 7 ==
Date: Sun, Feb 23 2014 7:30 pm
From: Daniel


On Sunday, February 23, 2014 9:13:29 AM UTC-5, James Kanze wrote:
>
> The highest ranked answers are rarely the correct ones.
>
Speaking as someone with a stackoverflow reputation of 81,234, so some votes must have hit the target :-)

Daniel




== 7 of 7 ==
Date: Mon, Feb 24 2014 2:57 am
From: Stuart


On 02/23/14, Stefan Ram wrote:
>
> Read the post »Welcome Slashdot refugees!« of February 6 in
> the newsgroup »comp.misc« and the following posts to witness
> the return of Slashdot users to Usenet.
>

I took your advice and I stumbled upon this posting,
<ldcp5b$ct9$1@speranza.aioe.org>, where the poster said that newsgroups
needed somehow be improved by some rating system in order to sort out
irrelevant or rather uninteresting postings.

I don't think that this is necessary. If you follow the newsgroup for a
while, you get to know people. Whenever I see either Alf, Bart, Bo, Ian,
James Kanze, Jorgen, Joshua Cramner, Juha, Paavo, Öö, yourself, Tobias
Müller, Ulrich, or Victor (in alphabetical order), I know that this
posting is worth reading.

Brian, Quall, and even Mr. Flibble make some interesting contributions,
although these are often buried in a mass of off-topic ramblings.

Regards,
Stuart





==============================================================================
TOPIC: IO problem
http://groups.google.com/group/comp.lang.c++/t/1627ad3e27ed2570?hl=en
==============================================================================

== 1 of 1 ==
Date: Sun, Feb 23 2014 6:39 am
From: James Kanze


On Wednesday, February 19, 2014 2:29:18 PM UTC, nvangogh wrote:
> I have come to a question in C++ Primer (p 314 , exercise 8.1) that is
> not clear to me.

> "Write a function that takes and returns an istream&. The function
> should read the stream until it hits end-of-file. The function should
> print what it reads to the standard output. Reset the stream so that it
> is valid before returning the stream."

This doesn't sound to clear to me either. For the most part,
istream input is formatted, so a lot of the characters don't
appear. I'm not too sure what you're supposed to be reading.
If it's ints, for example:

int i;
while ( file >> i && ! file.eof() ) {
if ( ! file ) {
file.clear();
file.ignore(); // but what, and how far?
} else {
std::cout << i << std::endl;
}
}

But of course, this will not reproduce the white space of the
original file. Otherwise:

std::cout << file.rdbuf();

sounds like the complete solution to the problem (but it's not
the sort of answer I'd expect from an introductory text).

> Breaking this down, the function has to do three things:

> 1. Read a stream until it hits end-of-file

Which is already a bit questionable. Normally, you read until
the read fails. Which can be because of end-of-file, but can
also be for other reasons.

> So the >> operator reads input from an istream object - cin.
> This stream's end of file can be interrogated by
> cin.eof().

Not really. The eof function is a bit tricky, in that its
return value reflects, or can reflect, internal state which
isn't well defined. Generally, you would never use cin.eof()
until input had failed.

> This returns true if the end of file bit is set which can be
> tested with a bool variable
> bool on = false;
> on = cin.eof();
> if(on == true)
> // end of file is reached, else
> if(on ==false)
> // keep reading cin

> I don't believe that this is completely correct so can someone show me
> how this code should be presented?

It's not completely correct, or at least, it's not complete.
cin.eof() does return the status of the eofbit. But when the
eofbit is set depends on a number of things, and it isn't
reliable unless an input has failed (and not always then).

The usual idiom is:

while ( std::cin >> something ) // ...

or (for lines):

while ( std::getline( std::cin, line ) // ...

(where line has type std::string).

After failure, you can use std::cin.eof() to determine whether
the failure is due to end of file, or something else. (In the
case of std::getline, it will almost certainly be end of file.)

> 2. Print what is read to the standard output
> I can only imagine this to be cout << ? But am lost from here

std::cout << will do the trick. But in the two while loops
above, the >> operator or getline will have removed characters
(white space or the new line character )from the input, that you
won't ever see.

The one exception is << from a streambuf. Using it is the
idiomatic way of copying one stream to another in C++. But it
represents a special case, which violates most of the usual
rules.

> 3. Reset the stream so it is valid before returning the stream
> This section of the problem again defeats me.

Again, it's not clear what this is supposed to mean. If the
input stream is a file (e.g. std::cin), there's practically no
way of doing this. std::cin.clear() will set the state to
good(), but since you've seen end of file, the next read will
immediately fail (or not, depending on the
implementation---there's a lot which isn't well defined here).
Or... it may mean you have to rewind (seek to the beginning of
the file). But this won't be possible if the input is from a
keyboard. And of course, if you've used std::cout <<
file.rdbuf(), the input stream won't have seen anything, and
will still be in its orginal state (but trying to read from it
will still fail, because the underlying streambuf is at end of
file).

--
James





==============================================================================
TOPIC: Iterator pair as a function argument?
http://groups.google.com/group/comp.lang.c++/t/d7a4099890dfa4ed?hl=en
==============================================================================

== 1 of 1 ==
Date: Mon, Feb 24 2014 3:12 am
From: Juha Nieminen


nvangogh <nvangogh@pcexpert.net> wrote:
> The first problem I have is to question if it is possible to pass
> iterators as distinct arguments to a function?

Why wouldn't it be? What exactly is the problem you are envisioning
with it?

bool foo(std::vector<int>::iterator b, std::vector<int>::iterator e, int)

Of course if you want to make the function more generic you should
templatize it so that it will accept iterators of any type of vector
(or even any other data container.)

--- news://freenews.netfront.net/ - complaints: news@netfront.net ---





==============================================================================
TOPIC: Flummoxed - Please Help!
http://groups.google.com/group/comp.lang.c++/t/d4b5a6ac1e14e414?hl=en
==============================================================================

== 1 of 1 ==
Date: Mon, Feb 24 2014 4:05 am
From: guinness.tony@gmail.com


On Tuesday, 18 February 2014 19:40:26 UTC, Mike Copeland wrote:
> I have the following (rather simple, I think) code which compiles but
> executes in a bizarre way: the code in the subprogram is skipped when
> called. 8<{{
> Here's the code and the call to it I use:
>
> string spellNumber(double value)
> {
> bool showThousands = false;
> bool allZeros = true;
> int ii, dPos, nn;
> char wc;
> string digits, temp;
> ostringstream ossw;
> static string builder;
> ossw.str("");
> ossw << value;
> digits = ossw.str();
> dPos = digits.find('.');
> if(dPos != string::npos) digits.erase(dPos);
> nn = digits.length();
> wc = digits.back();
> for(ii = digits.length()-1; ii >= 0; ii--)
> {
> int ndigit = (int)(digits[ii]-'0');
> int column = (digits.length()-(ii+1));
> } // for
> // more code to be added here
> return builder;
> }
> ...
> spellNumber(123.45); // call the function
>
> I have, of course the normal stdafx.h header and "use namespace
> std;", and this is code from a small test program I use to debug new
> functions and such. Many other programs and many thousands of lines of
> code work fine, but this code is weird...and I can't see what's wrong
> with it!
> Please advise... TIA

Your function returns a copy of the empty string named 'builder'.

Seeing this, the compiler can also determine that all the other code
has no observable external effect and is at liberty to ignore it.




==============================================================================

You received this message because you are subscribed to the Google Groups "comp.lang.c++"
group.

To post to this group, visit http://groups.google.com/group/comp.lang.c++?hl=en

To unsubscribe from this group, send email to comp.lang.c+++unsubscribe@googlegroups.com

To change the way you get mail from this group, visit:
http://groups.google.com/group/comp.lang.c++/subscribe?hl=en

To report abuse, send email explaining the problem to abuse@googlegroups.com

==============================================================================
Google Groups: http://groups.google.com/?hl=en

No comments: