🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1843

Re: HELP Anfaengerproblem!

#1843
From: 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
Technical Details
Message-ID: <4ie3eh$500@news.BelWue.DE>
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl
References: <64ugcSH3ZlB@point19.bigtime.rhein-main.de>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl
From: kuehl@uzwil.informatik.uni-konstanz.de (Dietmar Kuehl)
Newsgroups: de.comp.lang.c++
Subject: Re: HELP Anfaengerproblem!
Date: 16 Mar 1996 09:59:45 GMT
Organization: Fakultät für Mathematik und Informatik
Message-ID: <4ie3eh$500@news.BelWue.DE>
References: <64ugcSH3ZlB@point19.bigtime.rhein-main.de>
Reply-To: dietmar.kuehl@uni-konstanz.de
NNTP-Posting-Host: uzwil.informatik.uni-konstanz.de
X-Newsreader: TIN [version 1.2 PL2]