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 C1903

    was 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 Zeilen

    ifstream 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.


Anmelden zum Antworten