Avatar billede tosssen Nybegynder
29. december 2002 - 11:25 Der er 24 kommentarer og
1 løsning

cin.get

Nedenstående er et forsøg på at få brugeren til at indtaste sit navn. Problemet er at, hvis brugeren trykker <RETURN>, så kører do while løkken uendeligt.
Er der nogen der kan løse det, eller komme med et forslag til noget anden end cin.get, som kan løse mit problem.

  do
  {
    cin.get(navn,25);
    if (strlen(navn)==0)
    {
      cout << "Du skal skrive noget!" << endl;
    }
  } while (strlen(navn)==0);

Søren
Avatar billede tosssen Nybegynder
29. december 2002 - 11:27 #1
Kan det lade sig gøre at tømme input streamen for data, således at man starter på en frisk, når cin.get(navn,25) køres anden gang?
Avatar billede kring Nybegynder
29. december 2002 - 11:30 #2
String navn = "";

while(navn == "")
{
  cin.get(navn,25);
}
Avatar billede tosssen Nybegynder
29. december 2002 - 11:37 #3
Hvilken include file skal jeg bruge til String, som jeg går udfra er en C-String?
Avatar billede kring Nybegynder
29. december 2002 - 11:39 #4
Den ligger i <vcl.h>

Hvilket udviklingsværktøj bruger du??
Avatar billede tosssen Nybegynder
29. december 2002 - 11:40 #5
Visual C++ .NET
Avatar billede tosssen Nybegynder
29. december 2002 - 11:42 #6
Den include file har jeg ikke. Jeg får i hvert fald en fejlmeddelse der siger jeg ikke har.
Avatar billede kring Nybegynder
29. december 2002 - 11:42 #7
ok... det har jeg ikke prøvet... har brugt Borland C++ Builder...

Kan du få det til at fungere?
Avatar billede kring Nybegynder
29. december 2002 - 11:44 #8
string navn = "";

while(strlen(navn) == 0)
{
  cin.get(navn,25);
}
Avatar billede tosssen Nybegynder
29. december 2002 - 11:47 #9
Hmm, det giver problemer at bruge cin.get sammen med en std::string. Oprindeligt var navn bare et char array, og der virkede det fint, lige med undtagelse af at brugeren ikke måtte trykke <RETURN>.
Avatar billede kring Nybegynder
29. december 2002 - 11:50 #10
Hvad for nogle typer vil du helst have en løsning med?
Avatar billede tosssen Nybegynder
29. december 2002 - 11:51 #11
Enten std::string eller char array, da jeg bruger dem andre steder i mit program.
Avatar billede kring Nybegynder
29. december 2002 - 11:56 #12
oki.. jeg kigger lige på det...
Avatar billede tosssen Nybegynder
29. december 2002 - 11:58 #13
Mange tak!
Avatar billede kring Nybegynder
29. december 2002 - 12:11 #14
char navn[30];
        navn[0] = '\0';
        while(strlen(navn) == 0)
        {
                cout << "INDTAST NAVN: ";
                cin.get(navn, 25);
        }
        cout << "\n\nNAVN:" << navn;
Avatar billede kring Nybegynder
29. december 2002 - 12:12 #15
hmm... havde ikke lige fået testet det... den løsning må give en uendelig løkke når man bare trykket <RETURN>

2 min...
Avatar billede kring Nybegynder
29. december 2002 - 12:15 #16
Så burde den være der:

        char navn[30];
        navn[0] = '\0';
        while(strlen(navn) == 0)
        {
                cout << "INDTAST NAVN: ";
                cin.get(navn, 25);
                cin.ignore(1, '\n');
        }
        cout << "\n\nNAVN:" << navn;
Avatar billede tosssen Nybegynder
29. december 2002 - 12:31 #17
Perfekt, smid et svar så får du pointene! Faktisk er følgende nok til at løse problemet:

cin.ignore(1, '\n');
cin.get(navn,25);
Avatar billede kring Nybegynder
29. december 2002 - 12:39 #18
Jeps... =)
Avatar billede kring Nybegynder
29. december 2002 - 12:39 #19
Men husk at have ignore'en efter cin'en... =)
Avatar billede tosssen Nybegynder
29. december 2002 - 12:50 #20
Jeg har lige fået et nyt problem. Hvis brugeren trykker <RETURN>, så køres while løkken igen, men stopper ikke ved cin.get og kører derfor uendeligt :-(
Grunden til jeg troede det virkede er nok at jeg havde cin.ignore foran cin.get.
Avatar billede kring Nybegynder
29. december 2002 - 12:51 #21
Jeg har copy/pastet følgende direkte fra et kørende eksempel... og det virker perfekt.

char navn[30];
        navn[0] = '\0';
        while(strlen(navn) == 0)
        {
                cout << "INDTAST NAVN: ";
                cin.get(navn, 25);
                cin.ignore(1, '\n');
        }
        cout << "\n\nNAVN:" << navn;
Avatar billede tosssen Nybegynder
29. december 2002 - 12:56 #22
Jeg har også copy/pastet det ind i et testprogram og det virker ikke. Hvis man trykker <RETURN>, så skrives "INDTAST NAVN: " uendeligt mange gange til skærmen.
Avatar billede kring Nybegynder
29. december 2002 - 12:57 #23
Hele program-filen:

//---------------------------------------------------------------------------
#include <iostream.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        char navn[30];
        navn[0] = '\0';
        while(strlen(navn) == 0)
        {
                cout << "INDTAST NAVN: ";
                cin.get(navn, 25);
                cin.ignore(1, '\n');
        }
        cout << "\n\nNAVN:" << navn;
        return 0;
}
//---------------------------------------------------------------------------
Avatar billede tosssen Nybegynder
29. december 2002 - 13:03 #24
Jeg havde brugt #include <iostream> i stedet og det var det der gjorde forskellen ;-)
Avatar billede kring Nybegynder
29. december 2002 - 13:09 #25
hehe... ;o)
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