Probleme mit getline
-
Hallo !
int ersetze[30];
getline (cin,ersetze)und das ist die Fehlermeldung:
f:\programme\microsoft visual studio\vc98\include\string(149) : Siehe Deklaration von 'getline'
E:\Dokumente und Einstellungen\Heinz.VERLEIH-M42WT7Y\Desktop\Fertig c++\Kopie von Strings\MyString.cpp(438) : error C2784: 'class std::basic_istream<_E,_Tr> &__cdecl std::getline(class std::basic_istream<_E,_Tr> &,class std::basic_string<_E,_Tr,_A>
&)' : Vorlagenargument fuer 'class std::basic_string<_E,_Tr,_A> &' von 'int [30]' konnte nicht hergeleitet werden
E:\Dokumente und Einstellungen\Heinz.VERLEIH-M42WT7Y\Desktop\Fertig c++\Kopie von Strings\MyString.cpp(440) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'cout'
E:\Dokumente und Einstellungen\Heinz.VERLEIH-M42WT7Y\Desktop\Fertig c++\Kopie von Strings\MyString.cpp(467) : error C2664: 'substring' : Konvertierung des Parameters 1 von 'int [30]' in 'char *' nicht moeglich
Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
E:\Dokumente und Einstellungen\Heinz.VERLEIH-M42WT7Y\Desktop\Fertig c++\Kopie von Strings\MyString.cpp(467) : fatal error C1903was ist zu tun ??
Heinz
-
Ich würde sagen, der Fehler liegt nich tin der Zeile, sondern schon wieter drüber zeig mal noch Code von weiter oben mit an
-
Hallo !
Das tut mir aber jetzt leid, den Code hab ich nicht mehr . denn nachdem hier über 2 Stunden keine Antwort kam habe ich weiter programmiert.
Der folgende Code funkzionirt, aber nur mit cin >> nicht mit getline
Was kann ich denn sa noch ändern ?
H
int MyString::Dateiladen1()
{
MyString s1;char zeile[40000]; //Zeile max 10000 Zeichen
string Seite[40000]; // Datei Max 10000 Zeilenifstream dateiLese; // Eingabe Datei
string dateiname;cout <<"Welche Datei soll eingelesen werden: " << " ";
cin >> dateiname;
ofstream dateiSchreibe; // Ausgabe Datei
string dateiname1;
cout <<endl <<"Die Ausgabedatei heisst: ausgabe.txt" <<endl <<endl;
dateiname1 = "ausgabe.txt";cout << "Was soll ersetzt werden: " ;
string ersetze;cin >> ersetze;
char *buffer = new char[ersetze.length() + 1];
cout <<ersetze;
cout <<ersetze.length() + 1;
sprintf(buffer, "%s", ersetze.c_str());
cout <<endl << ersetze << " wird ersetzt"<< endl <<endl;
cout << "Womit ersetzen:" " ";
string ersetze1;
cin >> (cin,ersetze1);
char *buffer1 = new char[ersetze1.length() + 1];
sprintf(buffer1, "%s", ersetze1.c_str());
cout << ersetze1 << endl;
Maxi schrieb:
Ich würde sagen, der Fehler liegt nich tin der Zeile, sondern schon wieter drüber zeig mal noch Code von weiter oben mit an
-
#include <stirng> #include <iostream> int main() { std::string temp; std::getline(cin,temp); std::cout<<temp; }
-
Hallo !
Hab Deine code ausprobiert - aber Fehlanzeige.
Wenn ich folgendes an der konsole eingebe ABC DEF GHI und dann Enter drücke
wir nur ABC übernommen - der Rest ist weg !
Noch ne Idee ?
Heinz
Knuddlbaer schrieb:
#include <stirng> #include <iostream> int main() { std::string temp; std::getline(cin,temp); std::cout<<temp; }
-
#include <string> #include <iostream> int main() { std::string temp; std::getline(std::cin,temp); std::cout<<temp; }
Einagbe: ABC DEF GHI JKL
Ausgabe: ABC DEF GHI JKL
(hab übrigens mal die Tippfehler verbessert im Source).
Das geht definitiv.
2 Möglichkeiten:
Du hast es nicht ausprobiert
oder
Die STL hat bei Dir nen knacks (welcher Compiler Version Servicepack etc.)
-
Hallo !
Ja ne, is klar - wenn das so alleine da steht funktioniert es auch - aber ich habe ja zwei Eingaben hintereinander zu machen -
z.B.:
include <string>
#include <iostream>int main()
{
std::string temp;
cout <<"Bitte Ihre Eingabe 1";
std::getline(std::cin,temp);
std::cout<<temp;cout <<"Bitte Ihre Eingabe 2";
std::string temp1;
std::getline(std::cin,temp1);
std::cout<<temp1;
}Das Problem aber ist, wenn ich die erste Eingabe mache und ENTER drücke, dann erscheint bei Bitte Ihre Eingabe 2 der Text den ich bei der ersten Eingabe gemacht habe
Heinz
Knuddlbaer schrieb:
#include <string> #include <iostream> int main() { std::string temp; std::getline(std::cin,temp); std::cout<<temp; }
Einagbe: ABC DEF GHI JKL
Ausgabe: ABC DEF GHI JKL
(hab übrigens mal die Tippfehler verbessert im Source).
Das geht definitiv.
2 Möglichkeiten:
Du hast es nicht ausprobiert
oder
Die STL hat bei Dir nen knacks (welcher Compiler Version Servicepack etc.)
-
hi
bei zwei ausgaben musst du den buffer löschen..
#include <string> #include <iostream> using namespace std; int main() { string temp; cout <<"Bitte Ihre Eingabe 1"; getline(cin,temp); cout<<temp<<endl; cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cout <<"Bitte Ihre Eingabe 2"; string temp1; getline(cin,temp1); cout<<temp1<<endl; }
bitte verwende code tags, so kann man es nicht lesen.
übrigens: musst du zwei mal enter drücken, hol dir den patch von hume sikkins homepage. (da war der glaub ich irgendwo) ist ein problem des studios.
-
Hallo !
Auch Deinen neuen Vorschlag habe ich ausprobiert - aber zunächst funktionierte es nicht.
Wenn Dein Quellcode alleine steht und man führt ihn aus klappt ja alles - aber ich mache ja vorher im Programm an der Konsole noch weitere Angaben und werde gefragt u.a. wie die Datei zum einlesn heißt usw.
Ich habe nun die Zeile
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());einfach noch einmal vor Dein Beispiel eingefügt und zwar so:
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());string temp;
cout <<"Bitte Ihre Eingabe 1";
getline(cin,temp);
cout<<temp<<endl;cin.clear();
cin.ignore(cin.rdbuf()->in_avail());cout <<"Bitte Ihre Eingabe 2";
string temp1;
getline(cin,temp1);
cout<<temp1<<endl;und so funktioniert alles wunderbar.
Das mit dem 2 mal Enter drücken, da kann ich mit leben.
Vielen Dank ! Vielleicht kann ich Dir auch mal helfen - lerne jeden Tag was dazu hier im Forum.
Heinz
P.S.: Ich muß aber gleich noch einen Artikel hier posten - die Frage nämlich, wie ich bei MFC die Dokumente die da vorgegeben sind, wo oben Datei öffnen, kopieren etc. steht - das man das auch mit Funktionen belegen kann - das kann ich noch nicht so gut.
elise schrieb:
hi
bei zwei ausgaben musst du den buffer löschen..
#include <string> #include <iostream> using namespace std; int main() { string temp; cout <<"Bitte Ihre Eingabe 1"; getline(cin,temp); cout<<temp<<endl; cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cout <<"Bitte Ihre Eingabe 2"; string temp1; getline(cin,temp1); cout<<temp1<<endl; }
bitte verwende code tags, so kann man es nicht lesen.
übrigens: musst du zwei mal enter drücken, hol dir den patch von hume sikkins homepage. (da war der glaub ich irgendwo) ist ein problem des studios.