Namen einlesen in C++
-
HelferInDerNot schrieb:
#include <iostream> int main() { char name[21]; std::cout << "Bitte den Namen eingeben: "; std::cin.width(20); std::cin >> name; std::cout << "Ihr Name lautet: " << name; }Versteh nicht wieso du hier char name[21]; verwendest.
Könntest du mal erklären bitte?
MfG
Technology
-
Maxi schrieb:
include <iostream> #include <string> using namespace std; int main() { string name; cout << "Name eingeben!" << endl; cin >> name; cout << "Name ist: " << name << endl; return 0; }Das war schon keine schlechte Idee, nur würde ich getline benutzen damit er auch Leerzeichen erfasst.
#include <iostream> #include <string> using namespace std; int main() { string name; cout << "Name eingeben!" << endl; getline(cin,name); cout << "Name ist: " << name << endl; return 0; }
-
technology schrieb:
HelferInDerNot schrieb:
#include <iostream> int main() { char name[21]; std::cout << "Bitte den Namen eingeben: "; std::cin.width(21); std::cin >> name; std::cout << "Ihr Name lautet: " << name; }Versteh nicht wieso du hier char name[21]; verwendest.
Könntest du mal erklären bitte?
MfG
TechnologyNa 20 für den Namen und 1 für die abschließende Null
-
also ich würds so machen
#include <iostream> #include <string> int main(int argc, char** argv) { std::string name; std::cout << "Name eingeben!" << endl; std::cin >> name; std::cout << "Name ist: " << name << endl; return 0; }denn char* uda char[] sind C und in C++ verwendet man wenn möglich std::string.......
-
HelferInDerNot schrieb:
technology schrieb:
Versteh nicht wieso du hier char name[21]; verwendest.
Könntest du mal erklären bitte?
MfG
TechnologyNa 20 für den Namen und 1 für die abschließende Null
Und was machst du, wenn der User einen längeren Namen hat? cin überprüft nicht, ob hinter dem char* genug Platz ist für die Eingabe (-> undefined behaviour), deshalb nimmt man in C++ lieber std::string, die wachsen automatisch mit, wenn es notwendig wird.
@shade: Dein Programm kam aber auch schon

-
CStoll schrieb:
Na 20 für den Namen und 1 für die abschließende Null
Und was machst du, wenn der User einen längeren Namen hat? cin überprüft nicht, ob hinter dem char* genug Platz ist für die Eingabe (-> undefined behaviour), deshalb nimmt man in C++ lieber std::string, die wachsen automatisch mit, wenn es notwendig wird.[/quote]
Anscheinend hast DU dir das Beispiel oben gar nicht angesehen. Stammt ja auch nur von einem Gast

Außerdem rate ich einem Anfänger von std::string ab, man soll erstmal die Grundlagen lernen (hier eben Arrays), und sobald man dann OOP versteht kann man in die STL einsteigen.
-
Fachmann für Moderatoren schrieb:
Anscheinend hast DU dir das Beispiel oben gar nicht angesehen. Stammt ja auch nur von einem Gast

Ich will mich aber nicht in der Länge der Eingabe einschränken lassen.
Außerdem rate ich einem Anfänger von std::string ab, man soll erstmal die Grundlagen lernen (hier eben Arrays), und sobald man dann OOP versteht kann man in die STL einsteigen.
Und ich rate einem Anfänger zu std::string - in das rumgegurke mit Arrays und Zeigern kann man immer noch einsteigen, wenn man die Grundlagen begriffen hat.
(oder wenn man der Meinung ist, von C++ auf C umsteigen zu müssen)
-
Erstmal danke für die Hilfe

Wenn ich den Namen jetzt verkehrt wieder ausgeben möchte, verwende ich da besser Strings oder ein Array?
Mfg Max
-
Ist eigentlich egal, das umkehren des Strings macht in beiden Versionen genausoviel Arbeit (string's haben keine eigene Methode dafür und Algorithmen wie reverse() und reverse_copy() ist es egal, ob sie mit char* oder string::iterator gefüttert werden).
-
Ich hab das jetzt mal so gelöst:
#include <iostream>
using namespace std;int main()
{
char name[255];
cout << "Bitte den Namen eingeben: ",0;
cin >> name;
cout << "Ihr Name lautet: " << name <<endl;
}Nur würd ich jetzt gern wissen, wie ich dieses Array umdrehen kann?
Mfg Max
-
Wie gesagt, mit STL-Algorithmen:
reverse(name,name+strlen(name));(dazu benötigst du noch die Header <algorithm> und <cstring>)
Du kannst natürlich auch eine for-Schleife schreiben, die die Zeichen manuell vertauscht.
-
oder iteratoren ^^
#include <algorithm> #include <string> //edit #include <iteratoren> #include <iostream> std::copy(name.rbegin(), name.rend(), std::ostream_iterator<std::string>(std::cout);Gg