Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

cin.getline()

Empfohlene Antworten

Veröffentlicht

Wenn ich ein charfeld mit cin.getline() einlese und dann ein anderes charfeld wieder mit cin.getline() einlese, wieso liest er nur beim ersten mal das charfeld ein?? Das zweite charfeld wird dann irgendwie nicht eingelesen... was habe ich falsch gemacht??

Danke schon einmal im voraus...

nee...ich verwende Kdevelop unter Linux...

ich ahb hei mal den code reingeknackt.

C_Mensch::C_Mensch()

{

strcpy(Name,"leer");

Alter=0;

Geschlecht=true;

Familienstand=true;

}


C_Mensch::C_Mensch(char *name,int alter, bool geschlecht, bool familienstand)

{

strcpy(Name,name);

Alter=alter;

Geschlecht=geschlecht;

Familienstand=familienstand;

}


void C_Mensch::set()

{

char a;

cout<<"Bitte Namen eingeben: "; cin.getline(Name,20);            [COLOR="Red"]//hier das erste mal[/COLOR]

cout<<"Bitte Alter eingeben: "; cin>>Alter;

do

{

cout<<"Bitte Familienstand eingeben(l/v): ";

cin>>a;

if(a=='l')

{

Familienstand=true; break;

}

else

{

if(a=='v')

{

Familienstand=false; break;

}

else cout<<"Falsche Eingabe! Erneute Eingabe!"<<endl;

}

}while(1);

do

{

cout<<"Bitte Geschlecht eingeben(m/w): ";

cin>>a;

if(a=='m')

{

Geschlecht=true; break;

}

else

{

if(a=='w') 

{

Geschlecht=false; break;

}else cout<<"Falsche Eingabe! Erneute Eingabe!"<<endl;

}

}while(1);

}


void C_Mensch::show()

{

cout<<"\n\nAusgabe der Daten"<<endl;

cout<<"+++++++++++++++++"<<endl;

cout<<"\n Name: "<<Name<<endl;

cout<<"Alter: "<<Alter<<endl;

if(Familienstand)

{

cout<<"Familienstand: ledig"<<endl;

}

else cout<<"Familienstand: verheiratet"<<endl;

if(Geschlecht) cout<<"Geschlecht: maennlich"<<endl;

else cout<<"Geschlecht: weiblich"<<endl;

}


bool C_Mensch::Ehe(C_Mensch human)

{

if(Alter>=18)

{

	if(human.Alter>=18)

	{

		if(Familienstand==true)

		{

			if(human.Familienstand==true)

			{

				if(Geschlecht!=human.Geschlecht) return true;

			}else return false;

		}else return false;

	}else return false;

}else return false;

}



void C_Mensch::operator++()

{

Alter++;

}



C_Schueler::C_Schueler()

{

C_Mensch::C_Mensch();

Snummer=0;

strcpy(Datum,"01.09.00");

}


C_Schueler::C_Schueler(int nummer,char* date,char* name, int alter, bool sex, bool stand):C_Mensch(name,alter,sex,stand)

{

Snummer=nummer;

strcpy(Datum,date);

}


void C_Schueler::set()

{

C_Mensch::set();

cin.unget();

cout<<"Bitte Schuelernummer eingeben: "; cin>>Snummer;

cout<<"Bitte Datum eingeben (tt.mm.jj): "; cin.getline(Datum,8);                [COLOR="#ff0000"]//hier das 2.mal , hier funktioniert es nicht[/COLOR]

}


void C_Schueler::show()

{

C_Mensch::show();

cout<<"\nSchuelernummer: "<<Snummer;

cout<<"\nDatum: "<<Datum;

}

Das Problem ist vermutlich, dass nach einem cin << das Zeilenendezeichen noch im Eingabepuffer liegt, und damit der nächsten Aufruf von getline einen leeren String erkennt.

Das sollte sich beheben lassen, indem du vor jedem Aufruf von getline folgendes einfügst:

cin.ignore(cin.rdbuf()->in_avail());

Damit löschst du alles, was noch im Eingabepuffer liegt.

Ich habe vor jedem Aufruf von cin.getline() das gegebene eingefügt, doch es ist immer noch das selbe problem.....

also...ich hatte das letzte cin.getline() mit cin ersetzt....dadurch funktionierte es auch...aber sobald das cin.getline() ein 2. mal verwendet wird funktioniert es nicht...er überspringt einfach die datumeingabe....

Komischerweise bei mir nciht. Liegt es eventuel daran, dass ich mit KDevelop C/C++ arbeite??

ICh kann alles wie gehabt eingeben...Name, Alter, Familienstand, Geschlecht und Schülernummer. Aber wenn ich die Schülernummer eingebe und dann enter drücke überspringt er das Datum und geht gleich zur Ausgabe.....

hier einmal ein screenshot:

http://img208.imageshack.us/my.php?image=namenlosnz2.jpg

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.