Thread View: de.comp.lang.c++
2 messages
2 total messages
Started by Mathias Gruen-Drebes
Fri, 15 Mar 1996 15:26
HELP Anfaengerproblem!
Author: Mathias Gruen-Drebes
Date: Fri, 15 Mar 1996 15:26
Date: Fri, 15 Mar 1996 15:26
37 lines
1310 bytes
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!
Author: Dietmar Kuehl
Date: Sat, 16 Mar 1996 09:59
Date: Sat, 16 Mar 1996 09:59
70 lines
2902 bytes
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