std::cin manipulieren?



  • Guten Morgen zusammen,

    ich habe ein Programm mit der IC geschrieben und dieses Programm erwartet eine Eingabe. Diese Eingabe ist, wenn sie korrekt, ist immer 6 Zeichen lang. Da rechts von der Eingabe etwas steht und nur 3 Zeichen Platz, bei korrekter Eingabe, dazwischen ist und die Eingabe die Ausgabe überschreibt, hier meine Frage.

    Ist es möglich mit std::cin nur eine gewisse Anzahl von Zeichen einzulesen?


  • Mod

    😕 Ja. Lies nur sechs Zeichen ein.

    cin ist übrigens nicht ein Befehl, um eine Tastatureingabe durchzuführen. cin ist einfach ein Stream der an der Standardeingabe hängt. Wenn du aus cin liest und es sind keine Zeichen im Stream, dann muss das Programm eben warten, bis Zeichen kommen. Diese können zum Beispiel von einer umliegenden Konsolenumgebung kommen, die dann selber eine Eingabeaufforderung hat und von der Tastatur liest und das Ergebnis (wenn der Benutzer mit Enter bestätigt, dass er fertig ist) an das Programm weiter gibt. Dies sieht dann für den Benutzer so aus, als hatte sich das Programm um die Eingabe gekümmert. Dabei hat es nur gewartet.

    Wenn du nun der Konsole beibringen willst, nur bestimmte Sachen zuzulassen, dann musst du mit der Konsole reden. Leider ziemlich plattformabhängig. Und du machst es dann unmöglich, andere Quellen für die Standardeingabe zu benutzen, was in der Regel eher ärgerlich ist, sofern du nicht sowieso eine Text-GUI schreibst.



  • Guck Dir mal std::istream::getline an.



  • Danke für die Antworten.

    Ich habe gemerkt das ich mich falsch ausgedrückt habe. Ich möchte das auf der Konsole maximal 6 Zeichen wieder ausgegeben werden. Also nur das Echo der ersten 6 eingegebenen Zeichen.
    std::istream::getline funktioniert da leider nicht.



  • dann gibst du mit cout die ersten 6 Zeichen aus...

    greetz KN4CK3R



  • Aktuell frage ich so die eingabe ab

    std::getline(std::cin, std::string);
    

    wie kann ich da die Ausgabe beeinflussen?



  • eingabe schrieb:

    Aktuell frage ich so die eingabe ab

    std::getline(std::cin, std::string);
    

    wie kann ich da die Ausgabe beeinflussen?

    Bei der Eingabe kannst Du die Ausgabe garnicht beeinflussen.



  • genau, und deswegen verstehe ich ja KN4CK3Rs Beitrag nicht



  • eingabe schrieb:

    genau, und deswegen verstehe ich ja KN4CK3Rs Beitrag nicht

    Der Beitrag soll dir sagen, dass du nicht versuchen sollst, die Ausgabe nicht bei der Eingabe zu beeinflussen, sondern bei (oder kurz vor) der Ausgabe. Du willst von dem, was eingegeben wurde, nur die ersten 6 Zeichen wieder ausgebene, oder? Dann nimm den String, der eingegeben wurde, und gib die ersten 6 Zeichen wieder aus.
    In keinem Fall musst du aber std::cin "manipulieren".



  • Ich glaube er meint, dass vom Echo der Eingabe (also das, was angezeigt wird während man tippt) maximal sechs Zeichen auf der Konsole angezeigt werden sollen.

    Das geht aber mit Standard C++ Mitteln garnicht. Dafür musst Du das Terminal manipulieren (und das ist je nachdem, ob es eine Linux-Konsole oder eine Windows-Eingabeaufforderung ist grundlegend unterschiedlich zu handhaben, dafür solltest Du im entsprechenden Unterforum fragen).


  • Mod

    Ich glaube, er möchte, dass man nicht mehr als 6 Zeichen eintippen kann. Er hat irgendwas mit Textpositionierung gemacht:

    Eingabefeld:        Blablabla
    

    Und er möchte nicht, dass man das BlablaBla überschreiben kann. Dazu steht meine erste Antwort.



  • So kannst du die Ausgabe der ersten 6 Zeichen realisieren.
    Jedodoch weiß ich net was passiert wenn du weniger wie 6 Zeichen hast. Wenns einen Fehler wirft solltest du ein

    string meinString;
    cin>>meinString;
    cout<<meinStrin.substr(0,6);
    

    Jedodoch weiß ich net was passiert wenn du weniger wie 6 Zeichen hast. Wenns einen Fehler wirft könntest du das so umgehen:

    string meinString;
    cin>>meinString;
    if(meinString.length()>6)
        cout<<meinString.substr(0,6);
    else
        cout<<mainString
    

    Dies betrifft jetzt aber nur die Ausgabe!
    Ich weiß nicht ob ich dich richtig verstanden habe.



  • LordJaxom schrieb:

    Ich glaube er meint, dass vom Echo der Eingabe (also das, was angezeigt wird während man tippt) maximal sechs Zeichen auf der Konsole angezeigt werden sollen.

    SeppJ schrieb:

    Er hat irgendwas mit Textpositionierung gemacht:

    Eingabefeld:        Blablabla
    

    Und er möchte nicht, dass man das BlablaBla überschreiben kann.

    exakt das ist das, was ich meinte



  • Da wirst du wie schon einmal erwähnt wurde auf das Betriebssystem schauen müssen. Das ist bei jedem Betriebssystem wohl anders geregelt. Vielleicht findest du eine Bibliothek die für dich abstrahiert.



  • ok, danke dann schau ich da mal rum



  • eingabe schrieb:

    Ich möchte das auf der Konsole maximal 6 Zeichen wieder ausgegeben werden. Also nur das Echo der ersten 6 eingegebenen Zeichen.

    Meinst du so einen Hack? :p

    #include <iostream>
    #include <string>
    #include <conio.h>
    using namespace std;
    
    int main()
    {
    	int counter = 0;
    	string str;
    	char c;
    
    	while( (c=getch())!='\r' && c!='\n' ) // Mit Enter beenden.
    	{
    		++counter;
    		if(counter<7)
    		{
    			cout << c;
    			str += c;
    		}
            // oder das str+=c hierher machen... weiß ja nicht, ob du trotzdem alle Zeichen speichern möchtest.
    	}
    }
    

  • Mod

    Das wäre beispielsweise der Hack für die DOS-Konsole.


Anmelden zum Antworten