Avatar billede Slettet bruger
12. februar 2004 - 08:23 Der er 16 kommentarer og
2 løsninger

Hvorfor tages første karakter ikke med fra fil?

Jeg har følgende kode:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    char ch;
    const int buffSize = 200;
    char inBuff[buffSize];
    string iFileName;

    cout << "Skriv komplet sti til fil som skal laeses: ";
    cin >> iFileName;

    ifstream iFile(iFileName.c_str());

    while (iFile.get(ch))
    {
        iFile.getline(inBuff,buffSize);
        cout << inBuff << endl;
    }

  return 0;
}

Når jeg så får præsenteret filens indhold mangler første karakter i samtlige linier.

Hvordan kan dette problem løses?
Avatar billede jpk Nybegynder
12. februar 2004 - 08:25 #1
Den bliver jo "spist" af get...
Avatar billede Slettet bruger
12. februar 2004 - 08:25 #2
vil det sige at get spiser altid den første karakter af det den indlæser? Kedelig kommando!!

Hvordan kan jeg løse problemet så?
Avatar billede jpk Nybegynder
12. februar 2004 - 08:29 #3
Problemet er jo at du bruger get til at se omder er mere data i filen, men get indlæser 1 karakter som du jo ikke gemmer i din kode
Avatar billede jpk Nybegynder
12. februar 2004 - 08:30 #4
prøv peek istedet
Avatar billede jpk Nybegynder
12. februar 2004 - 08:31 #5
while(iFile.seek() != EOF)
{
  ...
}
Avatar billede jpk Nybegynder
12. februar 2004 - 08:32 #6
sorry:

while(iFile.peek() != EOF)
{
  ...
}
Avatar billede jpk Nybegynder
12. februar 2004 - 08:33 #7
peek returnerer den næste karakter (ligesom get), men lader den ligge i din stream, så en efterfølgende funktion (som fx getline) kan læse den
Avatar billede arne_v Ekspert
12. februar 2004 - 08:37 #8
Eller måske:

while(!iFile.eof())
Avatar billede jpk Nybegynder
12. februar 2004 - 08:46 #9
Ja, det ser da kønnere ud.
Underligt nok står den ikke i min funktionsoversigt...
Avatar billede arne_v Ekspert
12. februar 2004 - 09:22 #10
Mystisk - den har altid været der.

Og er f.eks. også nævnt her:
  http://www.cppreference.com/cppio_details.html#eof
Avatar billede Slettet bruger
12. februar 2004 - 09:51 #11
arne v> kan du lave et svar så får i begge point.

Lige et tillægs spm, hvis det er tilladt.

Hvad kan jeg anvende hvis jeg skal lave en test hvor man først skal indtaste fx "stemme nr 1" og derefter "person 1" i 2 forskellige felter og bagefter gemme det i en fil? Har prøvet med string og char men det virker ikke som det skal, de mellemrum driller.
Avatar billede arne_v Ekspert
12. februar 2004 - 10:03 #12
svar
Avatar billede arne_v Ekspert
12. februar 2004 - 10:04 #13
Både string og char array bør kunne bruges.

Men når du skal læse ind igen skal du enten:
  læse ord
eller:
  læse linier og parse de linier
Avatar billede Slettet bruger
12. februar 2004 - 10:21 #14
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string name, name1;
   
    cout << "Navn1 ";
    cin >> name;

    cout << "Navn2 ";
    cin >> name1;

    cout << "Navn1 er " << name << " og navn2 er " << name1 << endl;

    return 0;
}

sådan ser min kode ud men når jeg så skriver fx "albert nielsen" som navn besvare den automatisk begge spm :(
Avatar billede arne_v Ekspert
12. februar 2004 - 10:29 #15
Ja, >> terminerer ved mellemrum.

Brug getline.
Avatar billede arne_v Ekspert
12. februar 2004 - 10:33 #16
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string name, name1;
   
    cout << "Navn1 ";
    getline(cin,name);

    cout << "Navn2 ";
    getline(cin,name1);

    cout << "Navn1 er " << name << " og navn2 er " << name1 << endl;

    return 0;
}
Avatar billede Slettet bruger
12. februar 2004 - 10:34 #17
hvordan ville det så ud? laver kage for mig :(
Avatar billede Slettet bruger
12. februar 2004 - 10:35 #18
sorry.. har fundet ud af det....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester