Sätze einlesen
-
Danke für die schnelle Antwort.
Ich nutze doch gereits getline.
Kannst du mir im Code zeigen was du konkret meinst, und wo lese ich den Dateinamen 2 mal ein?
-
morisq schrieb:
Danke für die schnelle Antwort.
Ich nutze doch gereits getline.Für den dateinamen. Aber nicht für text1, den du hinterher in die Datei schreibst.
Kannst du mir im Code zeigen was du konkret meinst.
Ich bin zuversichtlich, dass du das selber hin bekommst.
-
Ok es funktioniert nun, allerdings wird mein letztes Wort geschluckt, woran liegt das?
-
entschludige, das erste Wort wird geschluckt.
-
morisq schrieb:
Ok es funktioniert nun, allerdings wird mein letztes Wort geschluckt, woran liegt das?
Vielleicht weil Du
while(einlesen){ einlesen>>wort; ... }statt
while(einlesen>>wort){ ... }oder
for(;;){ einlesen>>wort; if(!einlesen) break; ... }gemacht hast.
-
Tut mir leid aber das verstehe ich jetzt nicht, ich bin wie gesagt Anfänger.
In meinem Code kommen die von dir aufgezählten Beispiele nicht vor.
-
morisq schrieb:
entschludige, das erste Wort wird geschluckt.
Vielleicht weil vom cin>> noch das \n im cin steckt und sich das nicht ideal mit einem folgenden readline verträgt.
-
morisq schrieb:
Tut mir leid aber das verstehe ich jetzt nicht, ich bin wie gesagt Anfänger.
In meinem Code kommen die von dir aufgezählten Beispiele nicht vor.Ich ging davon aus, daß Du schon ein wenig weiter gebastelt hast, denn die Frage, warum die letzte Zeile nicht klappt, taucht eigentlich erst auf, wenn Du eine Schleife eingebaut hast.
-
das ist mein aktueller Code:
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>using namespace std;
int main()
{
ofstream auslesen;
string dateiname;
cout << "Geben Sie den Namen der Datei ein: ";
cin >> dateiname;
cout << endl;
auslesen.open(dateiname.c_str(), ios_base::out);string text1;
cout << " Was soll in die erste Zeile der Datei geschrieben werden? :"
cout << endl;
cin >> text1;
getline(cin,text1);
auslesen << text1 << endl;return 0;
system("pause");
}ich glaube ich bin zu blind den Zeilenumbruch in cin zu finden ich sehe da keinen

-
morisq schrieb:
Nach
[cpp]
cout << " Was soll in die erste Zeile der Datei geschrieben werden? :"
[cpp]fehlt ein Semikolon. Deswegen hat Dein Editor die folgezeile auch nicht hübsch eingerückt.
-
Das erste Wort wird bei dir mit
cin >> text1;gelesen und in der Zeile danach wird das was in text1 steht mit dem Rest der eingegebenen Zeile überschrieben. Daher bekommst du am Ende in text1 alles außer das erste Wort.
-
ok Danke euch.
Jetzt ist mir das Problem klarer.
Ich denke den Rest kriege ich selbst hin.Das semikolon im Quelltext natürlich Vorhanden @ Volkard, mein Compiler motzt sonst wegen der Syntax.
-
ich habe das ende nun abgeändert in folgende Form:
getline(cin, text1, 'n');
auslesen << text1;
system("pause");
return 0;wie kann ich die länge des eingegebenen Satzes steuern?
-
morisq schrieb:
wie kann ich die länge des eingegebenen Satzes steuern?
Was meinst du damit genau? Möchtest du die Eingabe nach einer gewissen Zeichenzahl abschneiden? Falls ja, dann ist getline nicht die richtige Wahl, da es, wie der Name sagt, zeilenweise einliest. Da bietet sich eher read an, welches stumpf eine vorgegebene Anzahl Zeichen einliest. Das arbeitet dann aber nicht so schön mit string zusammen. Jedenfalls muss schon vorher Platz für die gelesenen Zeichen vorhanden sein und man gibt dem read dann nur einen Zeiger auf das erste Zeichen. Das kann man erreichen, indem man ein vorher resize auf den string anwendet.
Da ich mir schon denken kann, welche Frage als nächstes kommt:
Auf www.cplusplus.com findest du eine Referenz zu C++. Dort kannst du einfach getline, read, resize und so in die Suchmaske eintippen und dir eine Beschreibung mit Beispiel angucken. Oder du stöberst direkt über das Inhaltsverzeichn is und guckst dir beispielsweise die istream und string Referenzen an.
-
Danke für den Tipp

Ich habe es versucht wie im Beispiel: mit.
.
.
.
char text1[256];
cin.getline(text1,256,'n');
.
.
.es werden aber immer nur 17 der von mir eingegebenen Zeichen gespeichert.
Steuere ich nicht über die Zahl hinter der char deklaration meine Länge?
-
Du steuerst die Anzahl über die Zahl beim getline. Das getline wird dann bis zu dieser Zeichenzahl lesen oder bis es das Trennzeichen, bei dir 'n', findet, je nachdem was vorher passiert.
Sei dir aber im Klaren, dass 'n' der Buchstabe n ist, nicht das Enter-Zeichen. Dieses ist '\n'. Ist das vielleicht der Fehler, weil deine Eingabe nach 17 Zeichen ein n enthält?
Und über die Anzahl der Zeichen bei der char-Deklaration steuert man in C++ überhaupt nie etwas. Diese Zahl können Funktionen denen du das Array übergibst nicht selber herausfinden, deshalb musst du die Zahl beim getline auch mit übergeben. Das ist oft ein großes Problem für Anfänger und deshalb sollte man Arrays auch eher vermeiden, sie sind eher ein Relikt aus alten Zeiten.
-
ok ich muss es für doofe wissen.
was muss ich an 3. Stelle in die getline() schreiben damit ich die Länge des einzulesenden Satzes steuern kann?
Schreibe ich 'n' bricht er beim ersten geschriebenen n logischerweise ab, schreibe ich '\n' dann kann ich gar nichts mehr eingeben, und schreibe ich eine zahl kommt eine fehlermeldung im Compiler.
Ich habe es schon richtig verstanden das an der Stelle wo ich das 'n' geschrieben habe die Zeichenanzahl geschrieben wird?
-
also ist laut dem was ich gelesen habe folgender Code korrekt:
char array[256];
cout << " Was soll in die erste Zeile der Datei geschrieben werden? :" << endl;
cin.getline(array,256);
auslesen << array;?
-
Das liest bis zu 255 Zeichen ein oder bis die Zeile zuende ist.
Darf ich übrigens mal so neugierig sein, warum du überhaupt die Zeilenlänge begrenzen willst?
-
leider macht es genau das nicht.
hab es jetzt viel einfacher versucht:
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>using namespace std;
void main ()
{
ofstream ausgabe;string dateiname;
//einlesen des Dateinamens
cout << " Dateiname: ";
cin >> dateiname;
cout << endl;ausgabe.open(dateiname.c_str(), ios_base::out);
//Daten in die Datei schreiben
string text1;
getline(cin, text1);
ausgabe << text1;
cout << text1 << endl;}
wenn ich das kompiliere dann kann ich nur einen Dateinamen eingeben und sonst nichts und das kann ja nicht sein weil ich in der getline Funktion nicht angegeben habe wann schluss sein soll.
Ich möchte einfach nur eine Zeile einlesen und wenn ich die mit Enter bestätige dann soll Sie gespeichert werden.
