/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
file.eof() læser et ikke eksisterende blan~
Fra : Michael Rasmussen


Dato : 09-03-06 01:27

Hej NG,

Jeg har en irriterende problem med eof test på en ifstream, som
resulterer i, at der læses et ekstra ikke eksisterende blanktegn.

CalculateSum.h
#ifndef CALCULATESUM_H
#define CALCULATESUM_H

#include <iostream>
#include <fstream>

class CalculateSum {

public:
   CalculateSum(std::string);
   const int getsum(void) const { return sum; }

private:
   void compute();
   bool string2int(const std::string &, int &);

   int sum;
   std::ifstream infile;
   
};

#endif

CalculateSum.cc
#include "CalculateSum.h"
#include "CalculateSumException.h"
#include <sstream>
using namespace std;

bool CalculateSum::string2int(const string &s, int &i)
{
istringstream myStream(s);

if (myStream>>i)
   return true;
else
   return false;
}

CalculateSum::CalculateSum(string filename)
{
sum = 0;
infile.open(filename.c_str(), ios::in);
if (!infile.is_open())
   throw FileNotFoundException(filename);
compute();
}

void CalculateSum::compute(void)
{
string s;
int    i;

while (!infile.eof())
{
   infile >> s;
   if (s != " ")
   {
    if (!string2int(s, i))
      throw BadNumberFormatException(s);
    sum += i;
   }
}
infile.close();
};

main.cc
#include <unistd.h>
#include <iostream>
#include "CalculateSum.h"

using namespace std;

int main()
{
int    sum;
CalculateSum c1("test1.txt");
sum = c1.getsum();
CalculateSum c2("test2.txt");
sum += c2.getsum();
CalculateSum c3("test3.txt");
sum += c3.getsum();
cout << "Sum: " << sum << endl;
return EXIT_SUCCESS;
}

test1.txt
1
2
3

test2.txt
4
5
6

test3.txt
7
8
9

Nogen der har et bud på, hvad der går galt?

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


 
 
Igor V. Rafienko (09-03-2006)
Kommentar
Fra : Igor V. Rafienko


Dato : 09-03-06 01:58

[ Michael Rasmussen ]

[ ... ]

> Jeg har en irriterende problem med eof test på en ifstream, som
> resulterer i, at der læses et ekstra ikke eksisterende blanktegn.


Det ligger i semantikken til EOF. EOF indikatoren blir ikke
nødvendigvis satt før etter at leseoperasjonen feilet.

[ ... ]


> void CalculateSum::compute(void)
> {
> string s;
> int    i;
>
> while (!infile.eof())
> {
>    infile >> s;


du mener antageligvis:

while ( infile >> s )

[ ... ]





ivr
--
"...but it's HDTV -- it's got a better resolution than the real world."
       -- Fry, "When aliens attack"

Michael Rasmussen (09-03-2006)
Kommentar
Fra : Michael Rasmussen


Dato : 09-03-06 02:30

On Thu, 09 Mar 2006 01:57:58 +0100, Igor V. Rafienko wrote:

>
>
> Det ligger i semantikken til EOF. EOF indikatoren blir ikke nødvendigvis
> satt før etter at leseoperasjonen feilet.
>
Hvorfor er alle codeeksempler i bøger/tutorials så opbygget med denne
struktur?

while (!file.eof())
file >>

Side 638 i c++ programming language viser dog, at testen først laves
efter read operationen, men din forklaring følger ikke, så man kunne
foranledes til at tro, at det ikke var fatalt, hvis testen blev foretaget
inden læsning.

> du mener antageligvis:
>
> while ( infile >> s )
>
Netop Det løste problemet. Takker.

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Igor V. Rafienko (09-03-2006)
Kommentar
Fra : Igor V. Rafienko


Dato : 09-03-06 13:37

[ Michael Rasmussen ]

[ ... ]

> Hvorfor er alle codeeksempler i bøger/tutorials så opbygget med
> denne struktur?


Fordi du leser gale bøker/tutorials? "C++ IO streams and locales" av
Langer og Kreft anbefales.


> while (!file.eof())
> file >>
>
> Side 638 i c++ programming language viser dog, at testen først laves
> efter read operationen, men din forklaring følger ikke, så man kunne
> foranledes til at tro, at det ikke var fatalt, hvis testen blev
> foretaget inden læsning.


Fatalt er det nok ikke, men det gir et potensielt uønsket resultat.

[ ... ]





ivr
--
"...but it's HDTV -- it's got a better resolution than the real world."
       -- Fry, "When aliens attack"

Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407944
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste