Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » cin.getline macht sich selbständis

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.04.2005, 22:38 Uhr
~Wedi
Gast


Hallo,
Ich muss ein Char Array einlesen. wenn ich nun

C++:
char test[20];
cin>>test;


verwende, habe ich bemerkt, dass er sämtliche Zeichen, die ich eingegeben habe einliest, auch wenn es mehr als 19 sind, folglich muss er ja über den dafür reservierten Speicher hinaus schreiben, was ja nicht sein sollte. Jetzt dachte ich, ich löse das Problem mit

C++:
char test[20];
do{
   ...
   cin.getline(test,20,'\n');
   cin.clear();
   ...
while(!fertig);

Das Problem ist nun, wenn ich mehr als 19 Zeichen eingebe, list er, nach einem Schleifendurchlauf, noch den Rest der Zeichen ein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.04.2005, 10:09 Uhr
Th



dafür gibt es die Methode 'ignore', z.B.

C++:
cin.ignore(1000, '\n');

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.04.2005, 10:36 Uhr
~Wedi
Gast


Ich habe bei mir mal das cin.clear(); durch dein cin.ignore(1000,'\n') ersetzt. es funktioniert aber immer noch nicht. Er liesst immer noch friesch fröhlich weiter.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.04.2005, 11:42 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


mal ganz was anders... warum quälst du dich mit einem char-array... wenn du c++ verwendest nimm doch einen std::string und dein overflow problem lösst sich ganz von selbst...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.04.2005, 11:51 Uhr
Spacelord
Hoffnungsloser Fall


So siehts aus.
Naja,aber um dem Problem nen Namen zu geben.Den Delimiter,den ignore "sucht" entfernst du mit getline aus dem Stream.
Mit get würde es funktionieren.


C++:
do
    {
       while(cin.peek()=='\n')cin.get();//Sonst gibts ne Endlosschleife bei "Leereingaben"
       cin.get(test,20);//max 20 Zeichen auslesen '\n' bleibt im stream
       cin.ignore(numeric_limits<int>::max(),'\n');
          
       cout<<test<<endl;
    }while(!fertig);



MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.04.2005, 13:56 Uhr
~Wedi
Gast


erstmal ein dankeschön an alle. Da ich einen char Array benötige (Vorgabe von Dozent) dachte ich, ich lese gleich ein Char Array ein. Habs jetzt doch so gelöst, dass ich wie Windalf geschrieben hat in ein string einlese, und diesen dann anschliessend für die restlichen Berechnungen in ein Char Array umwandle.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.04.2005, 01:43 Uhr
typecast
aka loddab
(Operator)


ANSI ->
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: