005
21.02.2004, 01:28 Uhr
Hans
Library Walker (Operator)
|
C++: |
#include <iostream> ... using namespace std;
|
>
C++: |
while ((c = getchar()) != '\n') ;
|
>
C++: |
c = getchar(); while (c == EOF) c = getchar();
|
das mit der Zeitberechnung weis ich jetzt nicht, - damit hab ich mich noch nicht beschäftigt. Aber wegen getchar() hab ich jetzt noch mal genauer nachgesehen. Da steht in der Beschreibung, das die Funktion am Dateiende oder im Falle eines Fehlers EOF zurück liefert. Der Fehlerfall ist der für uns interessante Teil. Die Funktion getchar() wird in Deinem Programm aufgerufen, und abgearbeitet. Weil in stdin, (das ist in diesem Fall die Eingabe von der Tastatur) zum Zeitpunkt des Aufrufs nichts drin steht, ist ein Fehler aufgetreten: Es liegen keine Zeichen vor. Also liefert die Funktion ein EOF zurück. Da dieses nicht weiter beachtet wird, wird das Programm mit return 0; beendet. Damit es wartet, muss also eine Möglichkeit her, das Ergebniss des getchar()-Aufrufs zu überprüfen, und die Funktion sooft aufzurufen, bis sie was anderes als EOF zurück liefert. Das genau passiert in dieser wilden Schleifenkonstuktion|CPP|| Das Semikolon, das da allein in einer Zeile steht, zeigt an, das diese Schleife einen leeren Rumpf hat, d.h. in der Schleife passiert nicht viel. Das was da passiert, steckt ja schon in der Abbruch-Bedingung mit drin. Man könnte diese Schleife auch so schreiben|CPP|| Die Sache mit dem EOF hat noch einen Haken: Man erhält es erst, nachdem die Enter-Taste gedrückt wurde. Wenn Du vorher was anderes eingegeben hast, dann wird das auf dem Bildschirm ausgegeben. Wie man es anstellt, die Schleife gleich nach dem ersten Tastendruck abgebrochen wird, weis ich jetzt nicht so genau. Es wahrscheinlich auch Systemspezifisch werden...
Die Möglichkeit, das Ergebniss von getchar(); gleich auf CR (also drücken der Enter-Taste) auf CR zu prüfen, also|CPP||hilft übrigens nicht. Das hatte ich zuerst gedacht, aber ein ausprobieren zeigte, das ich da Falsch lag. Zuletzt noch eine Anmerkung bezüglich C und C++
C++: |
/* Bei den Variablendeklarationen noch [b]int c;[/b] dazu schreiben! */
while ((c = getchar()) == EOF) ;
|
sind Bestandteile von C++. Dieses Programm ist aber ein reines C Programm, deshalb sind die C++ Elemente darin überflüssig. Denn #include <iostream> ist das C++ pendant zu #include <stdio.h> in C, und namespace gibt es nur in C++. -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 21.02.2004 um 01:33 Uhr von Hans editiert. |