Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

02.01.2012, 12:20

[C++] cin gibt keine sätze zurück

Hallo Community,
ich bin es wieder. Und zwar habe ich das Problem, dass cin nur das erste Wort des eingegebenen Satzes speichert. Ich müsste eine Möglichkeit finden, eine Frage auszulesen und abzuspeichern.
Hier mein verwendeter Code:

C-/C++-Quelltext

1
2
3
string question;
cout << "<< "; cin >> question;
cout << endl << question << endl;


Ausgabe:

Quellcode

1
2
<< Wie heißt du?
Wie


Ich habe schon überall gesucht. Mit cin.getline() habe ich schon rumprobiert, funktioniert bei mir nicht, da ich strings nutze und keine char-Arrays. Ich hoffe jemand kann mir eine Lösung liefern.

Frage: Wieso liefert cin nur das Erste Wort zurück?

Mit freundlichen Grüßen,

Maik

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

02.01.2012, 12:25

Benutz std::getline.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

02.01.2012, 15:18

Frage: Wieso liefert cin nur das Erste Wort zurück?

Weil das so spezifiziert wurde: http://www.cplusplus.com/reference/iostr…operator%3E%3E/
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

4

02.01.2012, 22:34

Vielen Dank für die Links. Haben mir sehr geholfen.

Maik

5

03.01.2012, 09:04

Die Links kannst du sogar selbst suchen & finden.
Nutze dieses Wissen! ;)

MfG
Check

6

03.01.2012, 10:09

Das kommt als Ausgabe zurück

Quellcode

1
2
3
==============================
>> Willkommen maik
<< >>Your Question: 


Der Code:

C-/C++-Quelltext

1
2
3
string question;
    cout << "<< ";
    std::getline (cin, question);


Irgendwas klappt da doch nicht. Man wird zu keiner Eingabe aufgefordert.

Ich nutze g++

Maik

Saik0

Treue Seele

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

7

03.01.2012, 10:10

Schau dir doch mal das Beispiel in der Referenz an.

8

03.01.2012, 11:20

Schau dir doch mal das Beispiel in der Referenz an.

Gibt es denn einen Unterschied zwischen

C-/C++-Quelltext

1
2
3
string str;
  cout << "Please enter full name: ";
  getline (cin,str);


und

C-/C++-Quelltext

1
2
3
string question;
    cout << "<< ";
    getline (cin,question);


Ich sehe keinen.

Ich includiere auch

C-/C++-Quelltext

1
2
3
4
#include <iostream>
#include <string>

using namespace std;


Maik

spark

Frischling

Beiträge: 10

Wohnort: Ulm

Beruf: Code Monkey.

  • Private Nachricht senden

9

03.01.2012, 11:37

Das geht auf jeden Fall:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include <iostream>

int main()
{
        std::string s;
        std::cout << "warte auf eingabe" << std::endl;
        getline(std::cin, s); 
        std::cout << "s ist: " << s << std::endl;
        return 0;
}


Guck mal ob das bei dir auch tut. Entweder du findest dann raus wo's klemmt, oder du baust das Testprogramm Stück für Stück in dein richtiges Programm um, bis du den Punkt findest an dem s hakt.

10

03.01.2012, 20:01

Dein Beispiel funktioniert auch bei mir. Jetzt habe ich aber der Funktion getline einfach mal den Delimiter hinzugefügt:

Quellcode

1
2
3
4
5
6
7
g++ -Wall -g -o "intelligent_program" "intelligent_program.cpp" person.class.cpp ki.ns.cpp (im Verzeichnis: /media/Daten/github/dt_tutorial_listings/c++/intelligent_program.d)
intelligent_program.cpp: In Funktion »int main()«:
intelligent_program.cpp:60:38: Fehler: keine passende Funktion für Aufruf von »getline(std::istream&, std::string&, const char [2])«
intelligent_program.cpp:60:38: Anmerkung: Kandidaten sind:
/usr/lib/gcc/i686-pc-linux-gnu/4.6.2/../../../../include/c++/4.6.2/bits/basic_string.h:2734:5: Anmerkung: template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::getline(std::basic_istream<_CharT, _Traits>&, std::basic_string<_CharT, _Traits, _Alloc>&)
/usr/lib/gcc/i686-pc-linux-gnu/4.6.2/../../../../include/c++/4.6.2/bits/basic_string.tcc:1070:5: Anmerkung: template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::getline(std::basic_istream<_CharT, _Traits>&, std::basic_string<_CharT, _Traits, _Alloc>&, _CharT)
Kompilierung fehlgeschlagen.


Irgendwas scheint dabei nicht in Ordnung zu sein. Ich gebe einen istream(std::cin) einen string (std::string) und ein char-Array(char[2]) in folgender Form:

C-/C++-Quelltext

1
getline(std::cin, frage, "\n");


Mein Teil-Code:

C-/C++-Quelltext

1
2
3
 std::string frage;
        getline(std::cin, frage, "\n"); 
        kiLoop(person, frage);


Der Rest:

Hauptprogramm - http://pastebin.com/sgSkUsuw
person-Klasse - http://pastebin.com/EABD5gJD
KI-Namespace - http://pastebin.com/qWsKfezi

Ich habe es sogar mit Debuggen versucht. Die Funktion wird ordnungsgemäß gestartet aber sofort wieder beendet. Als würde sie abgemurkst werden.

Maik

Werbeanzeige