txt Input
-
Das funktioniert primär deshalb nicht, weil du find immer noch falsch benutzt. Das hat dir nman schon mindestens 3x gesagt und er hat dir auch gesagt, wie du rausfindest, wie es richtig geht. Wenn du Antworten konsequent ignorierst, dann hilft dir sehr bald niemand mehr.
-
also damit du meine lage verstehst. ich habe keine ahnung wie ich dass machen soll trotz des beispiels nicht. doch statdessen dass mit hier jemand eine anständige hilfe gibt, wird mir gesagt wie ignorant ich sei, und dass ich dass alleine machen soll. also werde ich einfach weiterhin den falschen code benutzen bis ich den richtigen von jemandem erfahre. also wenn jemand die güte hätte mir einen winzig, winzig kleinen gefallen zu tun und zu abwechslung einfach mal den richtigen code zu schickenund mir zu sagen was jetzt nicht stimmt, wäre ich ihm sehr verbunden.
-
Oh nein. Du musst den Code völlig alleine schreiben? Wie grausam. Ich frage mich wie die anderen Programmierer das hier machen. Zeig mal etwas Eigeninitiative. Denkst du wirklich, dass du jetzt eine Lösung bekommst? Jetzt wohl erst recht nicht. Und denkst du wirklich, es interessiert jemanden ob du jetzt weiterhin den falschen Code benutzt? Ist wohl eher dein Problem.
-
nein, ich habe schon 9600 zeihlen code selbst geschrieben ich erhoffe mir dass mir jemand zeigen kann wie dass geht mit dem setg und dem find geht denn ich binn leider nicht eigenständig in der lage etwas darüber herauszufinden. außerdem ist das hier ein forum voll mit programmierern von denen 98% besser sind als ich ca. 50% die funktionen in und auswendich kennen und ca. 2% besitzt die güte ohne abfällige bemerkungen zu helfen!?! also nochmal wiesst du wie es geht und willst mir helfen oder willst du nur deinen senf dazugeben?
-
WhileTrueDo schrieb:
nein, ich habe schon 9600 zeihlen code selbst geschrieben ich erhoffe mir dass mir jemand zeigen kann wie dass geht mit dem setg und dem find geht denn ich binn leider nicht eigenständig in der lage etwas darüber herauszufinden.
Das kann ich nicht glauben.
Suche nach "c++ string find": https://www.google.de/search?q=c%2B%2B+string+find&ie=utf-8&oe=utf-8&rls=org.mozilla
official&client=firefox-a&gws_rd=cr&ei=Gu-UUpqZKMTeygPb4oDYBw
Erstes Ergebnis: http://www.cplusplus.com/reference/string/string/find/
Wichtiger Abschnitt zitiert:Return Value
The position of the first character of the first match.
If no matches were found, the function returns string::npos.Wenn du dazu nicht in der Lage warst, solltest du etwas anderes machen. Ernsthaft.
-
WhileTrueDo schrieb:
... also wenn jemand die güte hätte mir einen winzig, winzig kleinen gefallen zu tun und zu abwechslung einfach mal den richtigen code zu schickenund mir zu sagen was jetzt nicht stimmt, wäre ich ihm sehr verbunden.
dann versuche ich mal, Dir wenn vielleicht nicht den richtigen dann doch einen funktionsfähigen Code zu schicken.
Das vollständige Programm könnte so aussehen:#include <iostream> #include <string> #include <fstream> int main() { using namespace std; int height; ifstream TextInputIfStream("input.txt"); if( !TextInputIfStream.is_open() ) { cerr << "Konnte Datei nicht oeffnen" << endl; return -2; } for( string wort; TextInputIfStream >> wort && wort != "height"; ) ; // lese solange Wort, bis ein Wort =="height" ist char doppelpunkt; if( TextInputIfStream >> doppelpunkt >> height ) cout << "height = " << height << endl; else cerr << "Fehler beim Lesen" << endl; return 0; }Der obige Algorithmus setzt voraus, dass hinter dem 'height' in der Datei mindestens ein Leerzeichen oder Tabulator-Zeichen steht.
mal sehen wie dieser Thread weiter geht - im schlimmsten Fall gar nicht

Gruß
Werner
-
Werner Salomon schrieb:
for( string wort; TextInputIfStream >> wort && wort != "height"; ) ; // lese solange Wort, bis ein Wort =="height" ist char doppelpunkt; if( TextInputIfStream >> doppelpunkt >> height ) cout << "height = " << height << endl; else cerr << "Fehler beim Lesen" << endl; return 0; }Hi Werner,
kannst du mir bitte sagen ob meine Annahmen zu deinem Code oben richtig sind?
1.
Ich habe eine for Schleife bis jetzt nie so benutzt und das Abbruch Kriterium habe ich so auch noch nicht gesehen, nur um das mal zu verstehen.Du definierst zu erst einen string wort, dann pumpst du den Inhalt des momentanen streams in den String und das machst du so lange bis wort == height?
Aber wofuer ist das semikolon unter dem "for" body?Dein "if" verstehe ich leider ueberhaupt nicht. Was bedeutet das?
if( TextInputIfStream >> doppelpunkt >> height ) cout << "height = " << height << endl; else cerr << "Fehler beim Lesen" << endl;
-
hilfe streams schrieb:
Du definierst zu erst einen string wort, dann pumpst du den Inhalt des momentanen streams in den String und das machst du so lange bis wort == height?
Aber wofuer ist das semikolon unter dem "for" body?das ist richtig. Das Semikolon ist schlicht das Ende des Bodys der for-Schleife. Da der Body leer ist, steht nichts davor. Zum Thema 'in den String pumpen' siehe http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/. Ein String liest ein Wort - d.h. eine Sequenz von Zeichen ohne Leerzeichen (White Character)
Übersetzung:
{ string wort; forever { TextInputIfStream >> wort; if( TextInputIfStream.fail() ) break; if( wort == "height" ) break; } }Die for-Schleife so zu schreiben ist halt mein Stil; ich finde das selbst viel einfacher zu lesen. Aber das ist natürlich auch Gewohnheit - siehe auch http://www.c-plusplus.net/forum/p2366304#2366304
hilfe streams schrieb:
Dein "if" verstehe ich leider ueberhaupt nicht. Was bedeutet das?
if( TextInputIfStream >> doppelpunkt >> height ) cout << "height = " << height << endl; else cerr << "Fehler beim Lesen" << endl;Übersetzung:
TextInputIfStream >> doppelpunkt; // Lese ein Zeichen vom input (hoffentlich der ':') TextInputIfStream >> height; // Lese ein int in die Variable 'height' if( !TextInputIfStream.fail() ) // es ist kein Fehler aufgetreten cout << "height = " << height << endl; else cerr << "Fehler beim Lesen" << endl;genau wie bei der Ausgabe kann man auch bei der Eingabe mehrere >>-Ausdrücke hinter einander hängen. Der Returncode ist immer wieder eine Referenz auf den verwendeten
std::istream. Das if-Statement sorgt dafür, dass derbool*-operatordesstd::istreamgerufen wird, der intern einreturn !fail()macht. In C++98 war das einvoid*; dervoid*kann nachboolkonvertiert werden - entweder==nullptr(false) oder eben nicht (true)!
siehe auch http://www.cplusplus.com/reference/ios/ios/operator_bool/Gruß
Werner
-
Danke Werner!
-
vielen lieben dank werner!
