🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
2 messages
2 total messages Started by Mathias Gruen-Drebes Fri, 15 Mar 1996 15:26
HELP Anfaengerproblem!
#1841
Author: Mathias Gruen-Drebes
Date: Fri, 15 Mar 1996 15:26
37 lines
1310 bytes
Moin Moin
Ich hab da ein kleines Problem...
Ich soll zwecks eines Praktikums 16 einzelne Ziffern einlesen.
Folgendes dachte ich mir dazu:

        Eingabe:

        char wrt;

        for(int index=16;index>0;index--)
        {
                wrt = getchar();
                Bit[nr][index].Setze(wrt);
        }


        Ausgabe:

        char wrt;
        for(int index=16;index>0;index--)
        {
                wrt = Bit[nr][index].BitWert();
                cout<<wrt;
        }

Während intern tatsächlich nur 16 chars angenommen und gesetzt werden
kann ich bei der Eingabe aber beliebig viele Ziffern eingeben.
Ich möchte aber, daß nach 16 Ziffern automatisch (ohne RETURN)
Schluß ist - wie kann ich das erreichen? und-
Ist getchar eigentlich die richtige Funktion zum Einlesen von  
Einzelzeichen?

Thanx&CU
Matze


Ciao Mathias
Re: HELP Anfaengerproblem!
#1843
Author: Dietmar Kuehl
Date: Sat, 16 Mar 1996 09:59
70 lines
2902 bytes
Hi,
Mathias Gruen-Drebes (Mathias-Gruen@bigtime.rhein-main.de) wrote:
: Ich hab da ein kleines Problem...

Es klingt nach einem einfachen Problem, aber das ganze portable zu
machen ist ein grosses Problem. Halbwegs portable, ist es schon
minderwertig...

:         for(int index=16;index>0;index--)
:                 Bit[nr][index].Setze(wrt);

Das gibt vermutlich einen "off by one error": Der 'index' ist
vermutlich falsch. Ich kenne die Deklaration von 'Bit' nicht, aber
typischerweise sind Arrays in C++ mit '0' ... 'n-1' indiziert.  Ob das
hier auch der Fall ist, kann ich ohne Deklaration von 'Bit' und ggf.
den dazu gehoerenden Klassen allerdings nicht sagen.

: Während intern tatsächlich nur 16 chars angenommen und gesetzt werden
: kann ich bei der Eingabe aber beliebig viele Ziffern eingeben.
: Ich möchte aber, daß nach 16 Ziffern automatisch (ohne RETURN)
: Schluß ist - wie kann ich das erreichen?

Das ist hochgradig systemabhaengig und ich bin mir sicher, dass wenn
ihr die Aufgabe habt, 16 Zeichen einzulesen, euch niemand eine Loesung,
etwa fuer ein UNIX-System (sollte unter POSIX genauso funktionieren...),
als "eure" Loesung abnehmen wuerde. Sicher willst Du es trotzdem wissen.
Here we go (ohne Erklaerung: ich mag heute kein UNIX-Buch schreiben):

   #include <iostream.h>
   #include <termios.h>

   {
      struct termios    term;
      struct termios    save;
      if (tcgetattr(0, &save) < 0)
        return -1;

      term = save;
      term.c_lflag &= ~(ECHO | ICANON);
      term.c_cc[VMIN]  = 1;
      term.c_cc[VTIME] = 0;

      if (tcsetattr(0, TCSAFLUSH, &term) < 0)
        return -1;

      char wrt;
      for(int index = 16; index-- ; ) // siehe (*) unten
      {
         cin.get(wrt);
         Bit[nr][index].Setze(wrt);
      }

      if (tcsetattr(0, TCSAFLUSH, &save) < 0)
        return -1;
   }

(*) 'index' muss vermutlich VOR dem Zugriff auf das Array decrementiert
sein: Das ist "normale" C++ Logik. Ob das fuer 'Bit' auch zutriff weiss
ich allerdings nicht.

: und-
: Ist getchar eigentlich die richtige Funktion zum Einlesen von  
: Einzelzeichen?

Noe. Dafuer gibt es in C++ 'istream::get(char&)'. Verwendung: siehe
oben. Go for your "bigtime".
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl
I am a realistic optimist - that's why I appear to be slightly pessimistic
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads