Zum Inhalt springen

Problem mit string


Money Making Machinist

Empfohlene Beiträge

ch versteh das nicht! Das müsste eigentlich alles gehen, nur beim Einlesen und Ausgeben des Strings verwurschtelt er sich total. Ich habe VC6.0 (Autorenversion) benutzt.

Einfach mal ausprobieren -> Dann 2 drücken -> Text eingeben -> Tada! Komplette Verwurschtelei. Ich versteh nicht warum der die Ausgabe immer und immer wieder sich neu ausgeben zu versucht und warum der String solche Probleme erzeugt. Es muss irgendwie an getline(cin,o_text) liegen.

Hoffe ihr könntet mir da helfen.

Danke


#include <iostream>

#include <windows.h>

#include <string>

using namespace std;




void ausgabe(); //StandartAusgabe


void keywahl(); //UserAufforderung(key)

void textwahl(); //UserAufforderung(text)


int keyist(int key); //UserInfo(key)

void textist(string o_text); //UserInfo(text)


void beenden();



int main()

{

int eingabe;

int key;


string o_text;

string n_text;



ausgabe();




anfang:


cin >> eingabe;


if((eingabe == 1)||(eingabe == 2)||(eingabe == 3)||(eingabe == 4)||(eingabe == 5))

{

if(eingabe == 1) //Schlüsseleingabe

{

keywahl();

cin >> key;

system("cls");

ausgabe();

keyist(key);

goto anfang;

}


if(eingabe == 2) //Texteingabe

{

textwahl();

getline(cin,o_text);                                    //Hier!!!

system("cls");

ausgabe();

textist(o_text);

goto anfang;

}


if(eingabe == 3) //Verschlüsselung

{

cout << "Hier sollte verschlüsselt werden" << '\n';

}


if(eingabe == 4) //Neu

{ system("cls");

ausgabe();

}


if(eingabe == 5) //Beenden

{

beenden();

}


if(eingabe != (1 || 2 || 3 || 4 || 5 ))

{ system("cls");

ausgabe();

goto anfang; }

}


else { system("cls");

ausgabe();

goto anfang; }




return 0;

}


void ausgabe()

{


cout << "/////////////////////////////////////////////" << '\n';

cout << "1: Schluessel eingeben" << '\n';

cout << "2: Text eingeben" << '\n';

cout << "3: Mit Verschlüsselung beginnen" << '\n';

cout << "4: Neu" << '\n';

cout << "5: Beenden" <<'\n';

cout << "/////////////////////////////////////////////" << '\n';


}


void keywahl()

{


cout << "/////////////////////////////////////////////" << '\n';

cout << "///Sie muessen nun den Schlüssel eingeben!///" << '\n';

cout << "/////////////////////////////////////////////" << '\n';

}


void textwahl()

{


cout << "/////////////////////////////////////////////" << '\n';

cout << "///Sie muessen nun den Text eingeben!////////" << '\n';

cout << "/////////////////////////////////////////////" << '\n';

}


int keyist(int key)

{

cout << "Der gewaehlte Schluessel ist: " << key << '\n';

cout << "/////////////////////////////////////////////" << '\n';


return 0;

}


void textist(string o_text)

{


cout << "Der eingegebene Text ist: " << o_text << '\n';

cout << "/////////////////////////////////////////////" << '\n';


}

/*

void verschluesseln(string o_text)

{

cout << "/////////////////////////////////////////////" << '\n';

cout << "Die Kodierung ergab: " << '\n';

cout << mymethod(o_text) <<'\n'; //Kodierung!!!

cout << "/////////////////////////////////////////////" << '\n';


}


void mymethod(string o_text)

{

...



return n_text;

}

*/

void beenden()

{

cout << "/////////////////////////////////////////////" << '\n';



}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem ist, dass nach dem Einlesen des int immer noch das Zeilenvorschubzeichen im Eingabestrom steht. Du kannst vor jedem Einlesen aus cin den Puffer leeren und die Fehlerbits zurücksetzen:

cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
[/CODE]

P.S.: CPP-Tags haben wir hier nicht.

P.P.S.: Du solltest dir abgewöhnen, goto einzusetzen, wo es eine simple Schleife auch tut.

Link zu diesem Kommentar
Auf anderen Seiten teilen


cin.clear();

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

Jo danke, hat auch alles geklappt.

Allerdings, könntest du mir das etwas genauer erklären, zu clear() und ignore() hab ich selber was gefunden, nur zu cin.rdbuf()->in_avail() irgendwie nichts.

Und was mir für die Zukunft helfen würde: Wie bist du da draufgekommen?

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...