Der Benutzer möchte “Hello World” eingeben. Aber cin scheitert am Leerzeichen zwischen den beiden Wörtern. Wie kann ich machen cin das Ganze aufnehmen Hello World?
Ich mache das eigentlich mit Structs und cin.getline scheint nicht zu funktionieren. Hier ist mein Code:
struct cd
{
std::string CDTitle[50];
std::string Artist[50];
int number_of_songs[50];
};
std::cin.getline(library.number_of_songs[libNumber], 250);
Dies ergibt einen Fehler. Irgendwelche Ideen?
Sie sollten Ihre Fragen nicht bearbeiten, um solche neuen Fragen zu stellen. Der Grund dafür ist, dass die Leute bereits Antworten auf Ihre ursprüngliche Frage gegeben haben und diese Antworten jetzt aus dem Zusammenhang gerissen zu sein scheinen. Wenn Ihre ursprüngliche Frage bereits beantwortet wurde, beginnen Sie einfach mit einer neuen Frage, um Verwirrung zu vermeiden.
– Peter
30. April 2011 um 1:26 Uhr
Es ist nach einer kleinen Untersuchung offensichtlich, aber könnten Sie bitte eine Deklaration für die Variable hinzufügen library damit klar ist, dass es sich um den Typ handelt cd
– Candsie
30. April 2011 um 1:30 Uhr
Entschuldigung Leute, das war in Eile, ich werde das reposten.
– Herzogin
30. April 2011 um 1:38 Uhr
Wenn Sie es als Ersatz erneut veröffentlichen möchten, markieren Sie die Frage bitte zum Löschen durch einen Mod.
– Leichtigkeitsrennen im Orbit
30. April 2011 um 2:03 Uhr
In Ihrem Update versuchen Sie es getline In ein int. Das schlägt natürlich fehl.
– Ben Voigt
28. August 2013 um 18:38 Uhr
Leichtigkeitsrennen im Orbit
Es „versagt“ nicht; es hört einfach auf zu lesen. Es sieht ein lexikalisches Token als eine “Zeichenfolge”.
#include <string>
#include <iostream>
int main()
{
std::string name, title;
std::cout << "Enter your name: ";
std::getline(std::cin, name);
std::cout << "Enter your favourite movie: ";
std::getline(std::cin, title);
std::cout << name << "'s favourite movie is " << title;
}
Beachten Sie, dass dies der Fall ist nicht das Gleiche wie std::istream::getlinedie mit C-Stil funktioniert char Puffer statt std::stringS.
Aktualisieren
Ihre bearbeitete Frage hat wenig Ähnlichkeit mit dem Original.
Du hast es versucht getline In ein int, kein Zeichenfolgen- oder Zeichenpuffer. Die Formatierungsoperationen von Streams funktionieren nur mit operator<< und operator>>. Verwenden Sie entweder einen von ihnen (und optimieren Sie ihn entsprechend für die Eingabe mehrerer Wörter) oder verwenden Sie getline und lexikalisch umwandeln in int nach dem Fakt.
Diese Antwort gefällt mir viel besser als die akzeptierte, da ich keine Zeichenlänge angeben muss.
– Der Wanderer
7. September 2018 um 19:35 Uhr
@TheWanderer Das ist in der Tat ein erheblicher Vorteil.
– Leichtigkeitsrennen im Orbit
10. September 2018 um 10:34 Uhr
@LightnessRacesinOrbit, kannst du bitte helfen? Dies gibt mir ohne Grund einen zusätzlichen Zeilenumbruch, während ich meine Ausgabe drucke.
– Anshuman Kumar
25. Juni 2020 um 13:34 Uhr
@ AnshumanKumar denke ich getline kann den abschließenden Zeilenumbruch in der zurückgegebenen Zeichenfolge enthalten. Wenn ja, liegt es an Ihnen, es zu löschen.
@Kevin Meh, es passiert. C++ ist nicht genau so intuitiv, wie wir es gerne hätten.
– Peter
30. April 2011 um 0:54 Uhr
Ei; warum verwenden char– Puffer? Es ist 2011.
– Leichtigkeitsrennen im Orbit
30. April 2011 um 2:03 Uhr
Und warum nicht verwenden cin.getline(input, sizeof(input));? Sollten Sie nicht auch den Rückgabestatus überprüfen?
– Jonathan Leffler
14. Juni 2013 um 23:32 Uhr
@JonathanLeffler Als dies geschrieben wurde, war dies die Antwort, die ich auf die ursprünglich gestellte Frage hatte (sehen Sie sich den ersten Kommentar für die eigentliche Frage an und Sie werden sehen, dass sich der Kontext aufgrund einer Bearbeitung durch das OP geändert hat). Wie auch immer, wenn Sie der Meinung sind, dass die Antwort so schrecklich ist, stimmen Sie sie ab. Ich erkenne an, dass dies vielleicht nicht die “beste” Lösung ist, aber es ist eine Lösung nicht weniger. Anstatt zu fragen, warum ich etwas nicht verwendet habe, könnten Sie uns allen sagen, warum wir es auf Ihre Weise tun sollten.
– Peter
14. Juni 2013 um 23:50 Uhr
Ihre Antwort ist nicht schrecklich und muss nicht herabgestuft werden. Ich denke, zwei kleine Änderungen würden es verbessern. Änderung 1 würde verwenden sizeof(input) anstelle von 100 im Aufruf an cin.getline(); Das würde bedeuten, dass Sie die Größe des Eingabepuffers ändern können und nur eine Zeile anstelle von zwei Zeilen ändern müssen. Änderung 2 wäre, die Rücksendung zu testen cin.getline() indem Sie zum Beispiel if (!cin.getline(input, sizeof(input))) { ...handle EOF or error... } oder etwas Ähnliches, um das OP daran zu erinnern, dass insbesondere Eingabeoperationen anfällig für unerwartetes Verhalten sind. Andere Antworten brauchen dies auch.
– Jonathan Leffler
15. Juni 2013 um 0:23 Uhr
Entwickler gr
Die Standardbibliothek bietet eine Eingabefunktion namens ws, die Leerzeichen aus einem Eingabestream verbraucht. Sie können es wie folgt verwenden:
Ich denke, das ist bisher die beste Antwort. Ich kann dies mit dem std::cin>> oben kombinieren.
– Andrea
24. Oktober 2018 um 18:08 Uhr
Beste Antwort bisher. Beim Benutzen std::getline(std::cin, s) Ich würde eine sehr unordentliche und ich würde sagen, unterbrochene Eingabe beim Warten auf Eingaben in einem bekommen while/for Schleife. Diese Option hat mein Problem gelöst!
– Zlatan Omerović
8. Januar 2020 um 20:27 Uhr
Sstream einschließen: #include
– GilbertS
7. Februar 2020 um 9:45 Uhr
Verwenden :
getline(cin, input);
Die Funktion ist in zu finden
#include <string>
Sie möchten die .getline-Funktion in cin verwenden.
#include <iostream>
using namespace std;
int main () {
char name[256], title[256];
cout << "Enter your name: ";
cin.getline (name,256);
cout << "Enter your favourite movie: ";
cin.getline (title,256);
cout << name << "'s favourite movie is " << title;
return 0;
}
Habe das Beispiel genommen Hier. Weitere Informationen und Beispiele finden Sie hier.
Tatsächlich möchten Sie nur selten Mitglieds-getline. Es ist veraltet. Kostenlos nutzen getline stattdessen, die mit verwendet werden können std::string. [BTW, cplusplus.com is not a recommended resource]
– Leichtigkeitsrennen im Orbit
30. April 2011 um 2:05 Uhr
@Tomalak Warum wird cplusplus.com nicht empfohlen? Ich benutze es die ganze Zeit 😛
– Herzogin
30. April 2011 um 3:20 Uhr
@KevinDuke: Die Tutorials können irreführend und ungenau sein, und die Referenz enthält eine Vielzahl von Fehlern. Diese sind gute Quellen.
– Leichtigkeitsrennen im Orbit
30. April 2011 um 11:57 Uhr
@NickSweeting: Ja; Verwenden Sie stattdessen diese.
– Leichtigkeitsrennen im Orbit
4. April 2014 um 15:51 Uhr
Für Dokumentationslinks ist cppreference.com ein effektiver Ersatz für cplusplus.com (beide sind nicht offizielle Paraphrasen).
– Ben Voigt
10. Juli 2014 um 23:02 Uhr
DER C-WEG
Sie können verwenden gets Funktion gefunden in cstdio (stdio.h in c):
#include<cstdio>
int main(){
char name[256];
gets(name); // for input
puts(name);// for printing
}
#include<iostream>
#include<string>
using namespace std;
int main(){
char name1[256];
string name2;
cin.getline(name1,256); // for input
getline(cin,name2); // for input
cout<<name1<<"\n"<<name2;// for printing
}
Tatsächlich möchten Sie nur selten Mitglieds-getline. Es ist veraltet. Kostenlos nutzen getline stattdessen, die mit verwendet werden können std::string. [BTW, cplusplus.com is not a recommended resource]
– Leichtigkeitsrennen im Orbit
30. April 2011 um 2:05 Uhr
@Tomalak Warum wird cplusplus.com nicht empfohlen? Ich benutze es die ganze Zeit 😛
– Herzogin
30. April 2011 um 3:20 Uhr
@KevinDuke: Die Tutorials können irreführend und ungenau sein, und die Referenz enthält eine Vielzahl von Fehlern. Diese sind gute Quellen.
– Leichtigkeitsrennen im Orbit
30. April 2011 um 11:57 Uhr
@NickSweeting: Ja; Verwenden Sie stattdessen diese.
– Leichtigkeitsrennen im Orbit
4. April 2014 um 15:51 Uhr
Für Dokumentationslinks ist cppreference.com ein effektiver Ersatz für cplusplus.com (beide sind nicht offizielle Paraphrasen).
– Ben Voigt
10. Juli 2014 um 23:02 Uhr
Aufbau erfolgreich
Wie lese ich eine Zeichenfolge aus der Eingabe?
Sie können ein einzelnes, mit Leerzeichen abgeschlossenes Wort mit lesen std::cin so was:
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout << "Please enter a word:\n";
string s;
cin>>s;
cout << "You entered " << s << '\n';
}
Beachten Sie, dass es keine explizite Speicherverwaltung und keinen Puffer mit fester Größe gibt, der möglicherweise überlaufen könnte. Wenn Sie wirklich eine ganze Zeile (und nicht nur ein einzelnes Wort) benötigen, können Sie dies tun:
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout << "Please enter a line:\n";
string s;
getline(cin,s);
cout << "You entered " << s << '\n';
}
10019900cookie-checkstd::cin Eingabe mit Leerzeichen?yes
Sie sollten Ihre Fragen nicht bearbeiten, um solche neuen Fragen zu stellen. Der Grund dafür ist, dass die Leute bereits Antworten auf Ihre ursprüngliche Frage gegeben haben und diese Antworten jetzt aus dem Zusammenhang gerissen zu sein scheinen. Wenn Ihre ursprüngliche Frage bereits beantwortet wurde, beginnen Sie einfach mit einer neuen Frage, um Verwirrung zu vermeiden.
– Peter
30. April 2011 um 1:26 Uhr
Es ist nach einer kleinen Untersuchung offensichtlich, aber könnten Sie bitte eine Deklaration für die Variable hinzufügen
library
damit klar ist, dass es sich um den Typ handeltcd
– Candsie
30. April 2011 um 1:30 Uhr
Entschuldigung Leute, das war in Eile, ich werde das reposten.
– Herzogin
30. April 2011 um 1:38 Uhr
Wenn Sie es als Ersatz erneut veröffentlichen möchten, markieren Sie die Frage bitte zum Löschen durch einen Mod.
– Leichtigkeitsrennen im Orbit
30. April 2011 um 2:03 Uhr
In Ihrem Update versuchen Sie es
getline
In einint
. Das schlägt natürlich fehl.– Ben Voigt
28. August 2013 um 18:38 Uhr