Avatar billede tosssen Nybegynder
29. december 2002 - 13:33 Der er 14 kommentarer og
1 løsning

<iostream> vs. <iostream.h>

Nogen der ved hvorfor de to includes i titlen ikke er kompatible?
Når jeg bruger <iostream> fungerer cin.ignore(1,'\n') ikke.

Når jeg bruger <iostream.h> stopper programmet mellem følgende to linier:

  cout << "Bemaerk at ikke-besvarede opgaver taeller som forkerte..." << endl << endl;
  //Her stopper programmet
  cout << "Vil du se de rigtige svar til de opgaver, som du har loest forkert? (J/N)";

Hvordan får jeg begge dele til at virke?

Søren
Avatar billede tosssen Nybegynder
29. december 2002 - 13:33 #1
Jeg bruger visual studio .net
Avatar billede mickni33 Nybegynder
29. december 2002 - 13:37 #2
når du bruger <iostream>
skal du tilføje using namespace
eks.

#include<iostream>
#include<stdlib>

using namespace std;

int main(){
...
..
..
return 0;
}
Avatar billede tosssen Nybegynder
29. december 2002 - 13:38 #3
Det gør jeg også ;-)
Avatar billede arne_v Ekspert
29. december 2002 - 13:39 #4
Får du fejl, når du oversætter programmet elle rnår du kører
programmet ?

Hvis det er når du oversætter, så er mickis råd formentligt
løsningen.

Hvis det er når du k ører programmet, så kan det godt være lidt mere
giftigt.
Avatar billede tosssen Nybegynder
29. december 2002 - 13:41 #5
Som sagt så sker fejlene når jeg kører programmet. En slags fejl med den ene include file og en anden slags med den anden
Avatar billede arne_v Ekspert
29. december 2002 - 13:45 #6
Problemet er at compiler producenter ofte ønsker at være bagud kompatible, så
<iostream> kører i ANSI C++ mode, mens <iostream.h> skal være bagud
kompatibelt og somme tider betyder det ikke bare forskellig syntax
men også forskellig implementering.

Det løser ikke dit problem. Men det er altså ikke sort magi at det
virker forskelligt.
Avatar billede tosssen Nybegynder
29. december 2002 - 13:46 #7
Det er har jeg også fundet lidt om i hjælpen i programmet, men som du selv siger, så er det lidt svært at komme videre derfra.
Avatar billede tosssen Nybegynder
29. december 2002 - 13:48 #8
Følgende kodestump giver en uendelig løkke med <iostream> når brugeren trykker <RETURN>:

    navn[0] = '\0';
    while(strlen(navn) == 0)
        {
            cout << "Indtast dit navn: ";
            cin.get(navn, 25);
            cin.ignore(1, '\n');
        }
Avatar billede tosssen Nybegynder
29. december 2002 - 13:49 #9
Hvis dette kan undgås, så er mit problem løst, for så behøver jeg ikke bruge <iostream.h>
Avatar billede arne_v Ekspert
29. december 2002 - 13:58 #10
Hvorfor bruger du ignore ?

Kan get eller getline ikke bruges ?
Avatar billede tosssen Nybegynder
29. december 2002 - 14:00 #11
Grunden til jeg bruger ignore er, at jeg vil forhindre programmet i acceptere at brugeren trykker <RETURN> og på den måde undgår at skrive et navn
Avatar billede arne_v Ekspert
29. december 2002 - 14:01 #12
Men det sørger din while løkke vel for ?

Hvis han indtaster et tomt navn, så bliver han spurgt igen !

Og ignore forhindrer ham ikke i at taste return den betyder
kun at get vil ignorere nogle 1 tegn op til retur.
Avatar billede arne_v Ekspert
29. december 2002 - 14:05 #13
Noget i stil med:

#include <string.h>

#include <iostream>

using namespace std;


void test()
{
    char navn[25];
    strcpy(navn,"");
    while(strlen(navn) == 0)
    {
        cout << "Indtast dit navn: ";
        cin.getline(navn, sizeof(navn));
    }
    cout << "#" << navn << "#" << endl;
    return;
}

int main(int argc, char* argv[])
{
    test();
    test();
    return 0;
}

[testet med Mingw/GCC 3.1]
Avatar billede arne_v Ekspert
29. december 2002 - 14:12 #14
Og der er stor forskel på get og getline i denne konstruktion - det
skal være getline !
Avatar billede tosssen Nybegynder
29. december 2002 - 14:15 #15
Jep, nu virker det upåklageligt! Jeg havde oprindeligt en lignende konstruktion, hvor jeg brugte get, og den var grunden til jeg gik over til ignore ;-)
Mange tak!
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