Robert Könitz: c++ cin.getline

Hi,

Ich habe folgendes Problem mal vereinfacht dargestellt:

void main()
{
  char z[80];
  char t[20];

strcpy(t,"hello world");

cin.getline(z,79,'\n');
  cout << z;

}

Ich muss die t zeichenkette mit in die cin.getline(...) mit hinein bekommen,
so das ich in der Eingabe, also im normalen cin.getline das hello world
ersetzen bzw ergänzen oder ändern kann.

geht das überhaupt, wenn ja wie?

Danke schon mal im vorraus!
MfG Robert

  1. Hallo,

    »» void main()  
    
    > {  
    >   char z[80];  
    >   char t[20];  
    >   
    >   strcpy(t,"hello world");  
    
    // Du kannst hier auch gleich char t[] = "hello world"; schreiben  
    
    >   
    >   cin.getline(z,79,'\n');  
    >   cout << z;  
    >   
    > }
    
    

    Ich muss die t zeichenkette mit in die cin.getline(...) mit hinein bekommen,
    so das ich in der Eingabe, also im normalen cin.getline das hello world
    ersetzen bzw ergänzen oder ändern kann.

    Wenn du schon C++ nutzt, dann solltest du auch gleich Strings verwenden( std::string ).
    Soll ich dein Problem so verstehen, das du den String "hello world" mit der Eingabe editieren willst?
    Dann schreibe dein "hello world" auf den Bildschirm, rück den Cursor wieder an den Anfang, und lass den User drüberschreiben. Nach der Eingabe kontrollierst du das Eingegebene auf Änderungen gegenüber dem Original( "hello world" )

    Zudem ist deine main-Funktion falsch. siehe hier.

    MfG. Christoph Ludwig

    --
    Wo die Sprache aufhört, fängt die Musik an...
    Selfcode:  sh:( fo:| ch:} rl:( br:> n4:? ie:{ mo:) va:} js:| de:> zu:) fl:( ss:) ls:&
    Go to this
    1. Wenn du schon C++ nutzt, dann solltest du auch gleich Strings verwenden( std::string ).

      Das hat noch einen anderen Grund den ich hier nicht näher erläutern möchte.

      Soll ich dein Problem so verstehen, das du den String "hello world" mit der Eingabe editieren willst?

      Jupp

      Dann schreibe dein "hello world" auf den Bildschirm, rück den Cursor wieder an den Anfang, und lass den User drüberschreiben.

      Da gibt es nur folgendes Problem du musst es völlig überschreiben (damit es in cin erkannt wird) und wenn du einen Buchstaben weniger stehen hast, so wird dies nicht angezeigt, da müsste ich erst den Buffer von den dahinter liegenden Feldern löschen.
      (für die Ansicht)

      Zudem ist deine main-Funktion falsch. siehe hier.

      Ich weiß, aber unser Programmierlehrer°° - (Augenroll)

      Sonst noch Ideen?
      MfG Xynon

      1. Hi,

        Dann schreibe dein "hello world" auf den Bildschirm, rück den Cursor wieder an den Anfang, und lass den User drüberschreiben.

        Da gibt es nur folgendes Problem du musst es völlig überschreiben (damit es in cin erkannt wird) und wenn du einen Buchstaben weniger stehen hast, so wird dies nicht angezeigt, da müsste ich erst den Buffer von den dahinter liegenden Feldern löschen.
        (für die Ansicht)

        Ich verstehe das nicht ganz. Was genau willst du haben?
        Angenommen in t steht "hello world", und der User gibt "abc" ein, was soll dann am Schluss in t und z stehen?

        Du kannst t uebrigens auch einfacher initialisieren:
        char t[20] = "hello world";
        Das spart dir die Zeile mit strcpy()

        mfG,
        steckl

        1. Ich verstehe das nicht ganz. Was genau willst du haben?
          Angenommen in t steht "hello world", und der User gibt "abc" ein, was soll dann am Schluss in t und z stehen?

          t soll sich gar nicht ändern und in z sollte bei der einfachen Eingabe von abc
          "hello worldabc" stehen.

          Du kannst t uebrigens auch einfacher initialisieren:
          char t[20] = "hello world";
          Das spart dir die Zeile mit strcpy()

          Das sollte nur darstellen das der Wert nicht immer hello world heißt sondern auch andere Werte enthalten kann die erst zur laufzeit bestimmt werden.

          MfG Robert

          1. Hi,

            Ich verstehe das nicht ganz. Was genau willst du haben?
            Angenommen in t steht "hello world", und der User gibt "abc" ein, was soll dann am Schluss in t und z stehen?

            t soll sich gar nicht ändern und in z sollte bei der einfachen Eingabe von abc
            "hello worldabc" stehen.

            Du willst es also 'nur' anhaengen?
            Am einfachsten ist das wohl mit der Funktion strcat().

            Alternativ kannst du es auch so machen, dann sparst du der den zweiten String:
            char z[80] = "hello world";
            cin.getline(&z[strlen(z)],79);

            Die Zeile mit cin ueberschreibt z erst ab der Stelle, an der der vorher darin enthaltene String zu Ende ist.

            mfG,
            steckl

            1. Du willst es also 'nur' anhaengen?

              Nope, man soll es auch ändern können oder gänzlich löschen und die änderung sehen, wie im Prinzip ein normales Entry (Eingabefeld) nur halt auf der Konsole. (Mit dem unterschied das man hier schreibt wie mit gedrückter Einfg-Taste)

              Wenn es hilft ich kann auch jede Koordinate der Console bestimmen und Auslesen mein Problem ist nur wie ich meine Eingabe so hin biege das ich diese normal verändern kann.
              Da der Bufferspeicher der Konsole von allen cin, scanf, etc. Funktion wie ein Hitergrundbild betrachtet wird und nie in die Funktion übernommen wird.

              mfg Robert

              1. Hallo,

                Nope, man soll es auch ändern können oder gänzlich löschen und die änderung sehen, wie im Prinzip ein normales Entry (Eingabefeld) nur halt auf der Konsole. (Mit dem unterschied das man hier schreibt wie mit gedrückter Einfg-Taste)

                Dann bau dir doch ein Textfeld. So schwer ist das nicht. Als ich das mal gemacht hab, konnte ich mit dem Cursor arbeiten, überschreiben, erweitern, löschen. Nur hab ich das damals in C und nicht in C++ gemacht.

                MfG. Christoph Ludwig

                --
                Wo die Sprache aufhört, fängt die Musik an...
                Selfcode:  sh:( fo:| ch:} rl:( br:> n4:? ie:{ mo:) va:} js:| de:> zu:) fl:( ss:) ls:&
                Go to this
                1. Dann bau dir doch ein Textfeld. So schwer ist das nicht. Als ich das mal gemacht hab, konnte ich mit dem Cursor arbeiten, überschreiben, erweitern, löschen. Nur hab ich das damals in C und nicht in C++ gemacht.

                  Daran habe ich auch schon gedacht nur müsste ich dann wieder alle meine cin's überarbeiten und noch einige andere Sachen prüfen.
                  Ansonsten mit C ist das etwas einfacher, aber ich habe die buffers schon Auslesen können also sollte das kein Problem sein.

                  mfg Robert

                  1. Hallo,

                    Daran habe ich auch schon gedacht nur müsste ich dann wieder alle meine cin's überarbeiten und noch einige andere Sachen prüfen.

                    Tja. An sowas musst du gleich denken. Du hast keinen sauberen Entwurf gemacht und bekommst jetzt Probleme. Doch für Probleme sollte dies die falsche Stelle sein.
                    Merke dir: Der Entwurf ist in der Programmierung&Entwicklung das wichtigste überhaupt. Das eigentliche Programmieren ist dagegen nur ein Witz.

                    MfG. Christoph Ludwig

                    --
                    Wo die Sprache aufhört, fängt die Musik an...
                    Selfcode:  sh:( fo:| ch:} rl:( br:> n4:? ie:{ mo:) va:} js:| de:> zu:) fl:( ss:) ls:&
                    Go to this
                    1. Hi,

                      Tja. An sowas musst du gleich denken. Du hast keinen sauberen Entwurf gemacht und bekommst jetzt Probleme. Doch für Probleme sollte dies die falsche Stelle sein.

                      Je nachdem wie umfangreich ein Projekt ist kann man aber nicht immer alle Risikofaktoren im Detail genau durchplanen. Daher kann es immer sein, dass es mal zu Problemen nach der Entwurfsphase kommt.

                      mfG,
                      steckl

                    2. Tja. An sowas musst du gleich denken. Du hast keinen sauberen Entwurf gemacht und bekommst jetzt Probleme. Doch für Probleme sollte dies die falsche Stelle sein.
                      Merke dir: Der Entwurf ist in der Programmierung&Entwicklung das wichtigste überhaupt.

                      Hey, ich bin kein anfänger das weiß ich auch, nur hat steckl recht:

                      Je nachdem wie umfangreich ein Projekt ist kann man aber nicht immer alle Risikofaktoren im Detail genau durchplanen. Daher kann es immer sein, dass es mal zu Problemen nach der Entwurfsphase kommt.

                      Und die Idee mit dem Ändern in dieser Form ist mir erst später gekommen.

                      Das eigentliche Programmieren ist dagegen nur ein Witz.

                      Genau des wegen gibt es ja auch solche Foren, weil das Programmieren
                      nur ein Witz ist und alles von alleine geht.
                      Mal abgesehen davon kann das Konzept noch so gut sein, wenn
                      es dann aber in der Umsetzung mangelt muss man sehen wie man es löst
                      und das ist das eigentliche Programmieren.
                      Anders wäre es ja nur abtippen, dann frage ich mich aber wozu muss es noch programmiert werden, dann das ja der Computer auch gleich selber machen.

                      mfg Robert

                      1. Hallo,

                        Genau des wegen gibt es ja auch solche Foren, weil das Programmieren
                        nur ein Witz ist und alles von alleine geht.

                        Mit dem Ausdruck, das das nur "ein Witz" wäre, meinte ich, das das größte und schwierigste in Projekten die Logig, der Entwurf ist.
                        Solche und ähnliche Foren sind dazu da, Menschen bei beidem zu helfen:
                        bei der Logig/Entwurf/Konzept( z.b. wegen zu komplexer algorithmik ) und/oder bei der Realisierung durch eine Sprache( z.b. weil der Programmierer die Sprache noch nicht richtig kann und nützliche Befehle nicht kennt ).

                        Anders wäre es ja nur abtippen, dann frage ich mich aber wozu muss es noch programmiert werden, dann das ja der Computer auch gleich selber machen.

                        Nein. Soll der Computer etwa alle Sprachen können?
                        Ein Konzept beinhaltet nur die Denkweise. Und die ist Sprachunabhängig. Das es in der Umsetzung mangelt hat Gründe. Entweder kennt der Programmierer noch nicht die Befehle in der Sprache, die ihm helfen würden, oder die Sprache ist für das Problem nicht geeignet.
                        Dein Konzept kann vorschlagen, das CD-Laufwerk zu öffnen. Dieses Konzept kann noch so genau und detailiert sein. Wählst du aber HTML als Sprache um dies Umzusetzen, stehst du da und es mangelt an der Umsetzung.

                        Das eigentliche Programmieren hat durchaus etwas mit Denken zu tun. Dafür musst du aber nur die Sprache können, "mehr nicht".

                        MfG. Christoph Ludwig

                        --
                        Wo die Sprache aufhört, fängt die Musik an...
                        Selfcode:  sh:( fo:| ch:} rl:( br:> n4:? ie:{ mo:) va:} js:| de:> zu:) fl:( ss:) ls:&
                        Go to this
                        1. Hi,

                          Anders wäre es ja nur abtippen, dann frage ich mich aber wozu muss es noch programmiert werden, dann das ja der Computer auch gleich selber machen.

                          Ja, es gibt auch Programme, die aus UML-Diagrammen direkt Code generieren koennen.

                          Ein Konzept beinhaltet nur die Denkweise. Und die ist Sprachunabhängig.

                          Das sehe ich anders. Die verwendete Programmiersprache steht oft (immer?) bereits im Pflichtenheft. Die Erstellung des Pflichtenhefts wuerde ich mit in die Konzeptphase einordnen, da ja erst losprogrammiert werden sollte, wenn das Pflichtenheft abgesegnet ist.

                          mfG,
                          steckl

                          1. Hallo,

                            Das sehe ich anders. Die verwendete Programmiersprache steht oft (immer?) bereits im Pflichtenheft. Die Erstellung des Pflichtenhefts wuerde ich mit in die Konzeptphase einordnen, da ja erst losprogrammiert werden sollte, wenn das Pflichtenheft abgesegnet ist.

                            Ja, trotzdem ist der Entwurf Sprachenunabhängig, bzw. sollte das sein. Anders als in der Dokumentation, wo zum Teil auch auf Befehle eingegangen wird, was diese denn machen.

                            MfG. Christoph Ludwig

                            --
                            Wo die Sprache aufhört, fängt die Musik an...
                            Selfcode:  sh:( fo:| ch:} rl:( br:> n4:? ie:{ mo:) va:} js:| de:> zu:) fl:( ss:) ls:&
                            Go to this
                            1. Hi,

                              Das sehe ich anders. Die verwendete Programmiersprache steht oft (immer?) bereits im Pflichtenheft. Die Erstellung des Pflichtenhefts wuerde ich mit in die Konzeptphase einordnen, da ja erst losprogrammiert werden sollte, wenn das Pflichtenheft abgesegnet ist.

                              Ja, trotzdem ist der Entwurf Sprachenunabhängig, bzw. sollte das sein. Anders als in der Dokumentation, wo zum Teil auch auf Befehle eingegangen wird, was diese denn machen.

                              Was meinst du mit Sprache? Ich gehe von der Programmiersprache aus.
                              Was machst du, wenn du zum Beispiel Software fuer ein embedded System entwickeln sollst, fuer das nur ein C Compiler verfuegbar ist.
                              Oder das Projekt soll auf einem Webserver laufen, auf den man keinen Einfluss hat und es ist nur PHP und mySql verfuegbar.
                              Das musst du alles schon beim Entwurf beruecksichtigen.

                              Hier steht:

                              Basis für den Systementwurf sind die Dokumente der Definitionsphase, insbesondere das Pflichtenheft.

                              mfG,
                              steckl