Eingabe von Texten mit Leerschritt
-
habe ich probiert. leider bekomme ich diese fehler:
c:\Dokumente und Einstellungen\Internet\Desktop\C++-Schulung\Programme\Abschlussaufgabe optimiert\Abschlussaufgabe mit Strings.cpp(184) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'Mitglied'
c:\Dokumente und Einstellungen\Internet\Desktop\C++-Schulung\Programme\Abschlussaufgabe optimiert\Abschlussaufgabe mit Strings.cpp(184) : warning C4551: Dem Funktionsaufruf fehlt die Argumentlistehier mal meine programmierung
getline Mitglied[Zaehler].Name;ich wollte in der hilfe nachschauen, aber die hab ich nicht mitinstalliert, und die hilfecds nicht da. Wie muss die syntax denn genau lauten?
-
getline funzt z.B. so:
string str(""); cout<<"Bitte geben Sie einen Satz ein: "; getline(cin, str); //Liest den Satz in str rein cout<<"Sie haben "<<str<<" eingegeben\n";
-
gibt es auch die möglichkeit dies mit einem char-array zu machen?
-
also, hab das so hinbekommen...
aber bei der eingabe überspringt er manche eingaben. (bei mir name und ort)
woran liegt das?for (int Zaehler=0; Zaehler<gesNr; Zaehler++) // Schleife erhöht den Zähler Zaehler bei jedem Durchlauf um 1 { if (Mitglied[Zaehler].Name[0]==' ') // Überprüfung, ob Name leer // somit wird der erste leere Eintrag beschrieben { system("cls"); cout << "\n\tNeues Mitglied erfassen:"; cout << "\n\t~~~~~~~~~~~~~~~~~~~~~~~~"; cout << "\n\nBitte geben Sie nacheinander die gefragten Daten ein.\n\n"; cout << "Name:\t\t\t"; // Eingabe der gefragten Namen getline (cin, Mitglied[Zaehler].Name); //cin >> Mitglied[Zaehler].Name; // Name als char-Array cout << "\nVorname:\t\t"; getline (cin, Mitglied[Zaehler].Vorname); //cin >> Mitglied[Zaehler].Vorname; // Vorname als char-Array cout << "\nStrasse und Nr.:\t"; getline (cin, Mitglied[Zaehler].StrasseNr); //cin >> Mitglied[Zaehler].StrasseNr; // Strasse und Nr als char-Array, Eingabe ohne Leerzeichen!!! do // Schleife zur Vermeidung der Eingabe einer falschen PLZ { cout << "\nPLZ:\t\t\t"; cin >> Mitglied[Zaehler].PLZ; // PLZ als int if ((Mitglied[Zaehler].PLZ < 10000) || (Mitglied[Zaehler].PLZ > 99999)) { cout << "\n\t\afalsche Eingabe!!!\n"; } } while ((Mitglied[Zaehler].PLZ < 10000) || (Mitglied[Zaehler].PLZ > 99999)); cout << "\nOrt:\t\t\t"; getline (cin, Mitglied[Zaehler].Ort); //cin >> Mitglied[Zaehler].Ort; // Ort als string do // Schleife zur Vermeidung der Eingabe eines falschen Geburtsjahres { cout << "\nGeburtsjahr:\t\t"; cin >> Mitglied[Zaehler].GebJahr; // Geburtsjahr als int if ((Mitglied[Zaehler].GebJahr < 1900) || (Mitglied[Zaehler].GebJahr > 3000)) { cout << "\n\t\afalsche Eingabe!!!\n"; } } while ((Mitglied[Zaehler].GebJahr < 1900) || (Mitglied[Zaehler].GebJahr > 3000)); do // Schleife zur Vermeidung der Eingabe eines falschen Geburtsmonats { cout << "\nGeburtsmonat:\t\t"; cin >> Mitglied[Zaehler].GebMonat; // Geburtsmonat als int if ((Mitglied[Zaehler].GebMonat < 1) || (Mitglied[Zaehler].GebMonat > 12)) { cout << "\n\t\afalsche Eingabe!!!\n"; } } while ((Mitglied[Zaehler].GebMonat < 1) || (Mitglied[Zaehler].GebMonat > 12)); do // Schleife zur Vermeidung der Eingabe eines falschen Geburtstages { cout << "\nGeburtstag:\t\t"; cin >> Mitglied[Zaehler].GebTag; //Geburtstag als int if ((Mitglied[Zaehler].GebTag < 1) || (Mitglied[Zaehler].GebTag > 31)) { cout << "\n\t\afalsche Eingabe!!!\n"; } } while ((Mitglied[Zaehler].GebTag < 1) || (Mitglied[Zaehler].GebTag > 31)); do // Schleife zur Vermeidung der Eingabe eines falschen Monats { cout << "\nMitglied seit (Monat):\t"; cin >> Mitglied[Zaehler].MitgliedMon; // Mitgliedmonat als int } while ((Mitglied[Zaehler].MitgliedMon < 1) || (Mitglied[Zaehler].MitgliedMon > 12)); do // Schleife zur Vermeidung der Eingabe eines falschen Mitgliedsjahres { cout << "\nMitglied seit (Jahr):\t"; cin >> Mitglied[Zaehler].MitgliedJahr; // Mitgliedsjahr als int if ((Mitglied[Zaehler].MitgliedJahr < 1900) || (Mitglied[Zaehler].MitgliedJahr > 3000) || (Mitglied[Zaehler].MitgliedJahr < Mitglied[Zaehler].GebJahr)) { cout << "\n\t\afalsche Eingabe!!!\n"; } } while ((Mitglied[Zaehler].MitgliedJahr < 1900) || (Mitglied[Zaehler].MitgliedJahr > 3000) || (Mitglied[Zaehler].MitgliedJahr < Mitglied[Zaehler].GebJahr)); cout << "\nTelefonnr:\t\t"; cin >> Mitglied[Zaehler].Tel; // Telnummer als string cout << "\nBeitrag gezahlt? (j/n):\t"; cin >> Mitglied[Zaehler].Beitrag; // Beitrag als char if (Mitglied[Zaehler].Beitrag == 'j') // Erhöhung des Kontostandes bei { Konto=Konto+3; // Einzahlung des Beitrags } cout << "\nMoechten Sie ein weiteres Mitglied einlesen?\t"; cin >> Eingabe; if (Eingabe == 'n') // ohne diese Abbruchbedingung läuft die { break; // Schleife auch bei Eingabe n weiter. } // Kann mir nicht erklären, warum. } }und ein weiteres prob hab ich:
ich habe ein verwaltungstool, jedesmal wenn ich das menu "Beitrag zahlen" (um die Beiträge für die einzelnen Mitglieder einzuzahlen)aufrufe, kommt direkt eine total komische ausgabe. schaut zuerst ein bisschen aus wie weihnachten (ein paar sterne) und am schluss▓
GetStringTypeA Á
GetStringTypeW 7☻IsValidLocale 5☻IsValidCodePage l
GetLo
leInfoA Ñ EnumSystemLocalesA ┘
GetUserDefaultLCID y
VirtualProtect ╗
GetSy
emInfo {
VirtualQuery ß☻SetConsoleCtrlHandler ▼☻InterlockedExchange R
GetExit
deProcess â
WaitForSingleObject ` CreateProcessA § GetACP ï
GetOEMCP
☻Reaund ich kann mir das garnet erklären, was ich falsch haben soll. hier mal der code:
do // Schleife, läuft solange Eingabe gleich j { system("cls"); cout << "\n\tBeitrag zahlen:"; cout << "\n\t~~~~~~~~~~~~~~~"; for (int Zaehler=0; Mitglied[Zaehler].Name != " " && Mitglied[Zaehler].Beitrag == 'n' && Zaehler < gesNr; Zaehler++) { cout << endl << Zaehler; // Ausgabe aller Mitglieder, deren Beitrag gleich nein ist cout << " --> "; cout << Mitglied[Zaehler].Name; cout << ", "; cout << Mitglied[Zaehler].Vorname; cout << endl; } cout << "\nFuer wen soll der Beitrag eingezahlt werden?\n\n\t"; cin >> MitgliedNr; if (Mitglied[MitgliedNr].Beitrag=='n') { Mitglied[MitgliedNr].Beitrag='j'; Konto=Konto+3; if (Mitglied[MitgliedNr].Name != " ") { cout << "\n\nDer monatliche Beitrag von 3 Euro wurde fuer \n"; cout << Mitglied[MitgliedNr].Vorname << " "; // wenn ungleich leer, dann wird der Name cout << Mitglied[MitgliedNr].Name << " "; // angezeigt cout << "gezahlt.\n\n"; } else { cout << "\n\nDer monatliche Beitrag von 3 Euro wurde fuer Mitglied Nr. "; cout << MitgliedNr << " gezahlt.\n\n"; // ansonsten die Mitglieder Nr } } else { cout << "\n\nDer Beitrag wurde bereits gezahlt.\n"; // Obwohl die Mitglieder, deren Beitrag schon gezahlt wurde // nicht aufgezählt werden, kann man per Nummerneingabe auch diese auswählen, um den Beitrag nicht erneut // einzuzahlen, diese zweiseitige Auswahl } cout << "Zahlt ein weiteres Mitglied den Beitrag ein?\t"; cin >> EingabeBeitrag; // Eingabe, ob weiteres Mitglied bezahlt } while (EingabeBeitrag == 'j'); Menu(); }
-
1. Ob ein std::string leer ist, prüfst du besser mit
if (str.length()==0) { //wenn "leer" }2. Dass Name und Ort übersprungen werden, liegt daran, dass vom Einlesen der Zahlen noch was im Stream liegt: das \n .
Pack das vor das Einlesen von Name und Ort:while (getchar()!='\n');3. Deine Einrückung könnte besser sein, erleichtert das lesen.
Dein anderes Problem könnte ich mir nur damit erklären, dass die Konsole kein ä ü ö usw. kann, aber mit dieser Ausgabe kann ich auch nichts anfangen, sorry.
-
zum \n:
ich habe das gemacht, aber ändert nix. ich bin mir nicht sicher, ob ich das so gemacht habe, wie du meintest. in welchen zeilen hast du das denn gemeint.ich habe keine umlaute eingegeben, oder im text, daran kann es also nicht liegen.
den tipp mit der länge eines zeichens werde ich anwenden, danke für den tipp
-
sarah1986 schrieb:
zum \n:
ich habe das gemacht, aber ändert nix. ich bin mir nicht sicher, ob ich das so gemacht habe, wie du meintest. in welchen zeilen hast du das denn gemeint.while(getchar()!='\n'); cout << "Name:\t\t\t"; // Eingabe der gefragten Namen getline (cin, Mitglied[Zaehler].Name); //cin >> Mitglied[Zaehler].Name; // Name als char-Array //...blub blub blub while(getchar()!='\n'); cout << "\nOrt:\t\t\t"; getline (cin, Mitglied[Zaehler].Ort); //cin >> Mitglied[Zaehler].Ort; // Ort als stringSollte so gehen.
-
seit der änderung hab ich beim aufruf der funktion "neuer user" den
run-time check failure #3
und ich kann mir nicht erklären warum...
-
sarah1986 schrieb:
und ich kann mir nicht erklären warum...
Wie die Meldung (die du leider nicht gepostet hast) schon sagt, benutzt du eine uninitialiserte Variable. Die Entwicklungsumgebung sollte dir auch sagen, wo das passiert und um welche Variable es sich handelt.
-
es ging die ganze zeit, ich habe die variable deklariert. es ist alles in ordnung. kann dir gerne mal meinen kompletten code schicken, wenn du willst.