welche variante ist besser?
-
hej,
jeg lerne gerade c++.nun habe ich zwei varianten für
- texteingabe und anschließend wieder ausgeben
kennegelernt.
Einmal
[cpp]char myname[21];
cout << "Bitte gebe deinen Namen ein:" <<endl;
cin >> myname;
cout << "Dein Name ist: "<<myname;[/cpp]ODER
char myname[21]; cout << "Bitte gebe deinen Namen ein:" <<endl; cin.getline(myname, 80); cout << "Dein Name ist: "<<myname;
Mir fällt das erster leichter zu merken aber wo ist der Unterschied?
WANN wende ich welche Variante an?
-
schuberti schrieb:
Mir fällt das erster leichter zu merken aber wo ist der Unterschied?
Die 2. Variante liest eine Zeile ein, die 1. nur ein Wort.
WANN wende ich welche Variante an?
Am besten keine von beiden. Schonmal überlegt, was passiert, wenn der Benutzer mehr als 20 Zeichen eingibt?
Richtig geht das übrigens so:#include <string> std::string myname; std::cin >> myname; std::cout << myname; // oder std::string myname; std::getline(std::cin, myname); std::cout << myname;
-
schuberti schrieb:
WANN wende ich welche Variante an?
Gar nicht.
std::string blah; std::cin >> blah; // liest nur ein Wort getline(std::cin,blah); // liest eine ganze Zeile
Gruß,
SP
-
schuberti schrieb:
... aber wo ist der Unterschied?
Die erste Variante liest nur ein Wort ein, einfach bis zum nächsten Whitespace, während die zweite Variante die ganze Zeile liest oder bis 80 Zeichen gelesen wurden.
schuberti schrieb:
WANN wende ich welche Variante an?
Mit dem Unterschied sollte dies wohl nun klar sein. Allerdings hat deine zweite Variante noch undefiniertes Verhalten, weil du einen kleineren Buffer als 80 Zeichen übergibst.
Grundsätzlich würde ich allerdings von beiden Variante abraten und eher volles C++ zu nehmen und daher auch
std::string
.#include <string> #include <iostream> int main() { std::string line; std::geline(std::cin, line); // Ganze Zeile lesen, egal wieviele Zeichen es sind. std::string word; std::cin >> word; // Ein Wort lesen. return 0; }
Grüssli
-
Dravere schrieb:
#include <string> #include <iostream> int main() { std::string line; std::geline(std::cin, line); // Ganze Zeile lesen, egal wieviele Zeichen es sind. std::string word; std::cin >> word; // Ein Wort lesen. return 0; }
Grüssli
Schließe mich an. Bei
getline
fehlt noch ein t.