2 Stimmen

Im Rahmen der Dateiverarbeitung in einer C++-Konsolenanwendung: Maximale Anzahl von Zeichen, die ohne horizontales Scrollen angezeigt werden können?

Mein Professor hat uns heute beigebracht, wie man in C++ mit Dateien umgeht. Er hat ein sehr einfaches Programm geschrieben, das zwei Zeilen aus einer Textdatei liest und diese mit der Funktion fin.getline() auf dem Bildschirm anzeigt. Er wählte die Größe des Arrays, das die gelesene Zeile speicherte, auf 80 Zeichen. Er erklärte dann, dass es UNBEDINGT 80 sein müsse, weil eine Zeile "auf dem Bildschirm" aus 80 Zeichen besteht.

Ich konnte wirklich nicht verstehen, was er meinte. Die Anzahl der Zeichen, die auf dem Bildschirm erscheinen, hängt das nicht von Bildschirm/Schriftart/Auflösung ab?

Selbst in Compilern so alt wie Borland und Turbo C++, gab es keinen Weg, wie man festlegen konnte, wie viele Zeichen auf dem Bildschirm angezeigt werden, wenn (unter der Annahme, dass die Zeilenumbrüche aktiviert sind) ?

Ich konnte sein Konzept von strikten "80 Zeichen" nicht erfassen. Könnten Sie das bitte erklären?

3voto

Er wählte die Größe des Arrays, das die gelesene Zeile speicherte, auf 80 Zeichen festgelegt. Er erklärte dann, dass es UNBEDINGT 80 sein muss, weil eine Zeile "auf dem Bildschirm" aus 80 Zeichen besteht.

Ich konnte nicht wirklich verstehen, was er sagte. Die Anzahl der Zeichen, die auf dem Bildschirm erscheinen, hängt das nicht von Bildschirm/Schriftart/Auflösung ab?

Ja, genau.

Ich konnte sein Konzept von festen "80 Zeichen" nicht verstehen. Kannst du das bitte erklären?

Das ist kompletter Unsinn. C++ spezifiziert nichts derartiges, und jeder Terminal kann konfiguriert werden.

2voto

DuncanACoulter Punkte 2057

Ich würde immer die Version von getline bevorzugen, die in string enthalten ist, da Sie keinen Speicherplatz vorab zuweisen müssen. Es ist sehr kurzsichtig, auf 80-Zeichen-Limits zu bestehen, da Sie Text meistens nicht für die Anzeige auf Textkonsolen manipulieren werden.

#include <string>
#include <fstream>
#include <iostream>

using namespace std;

int main()
{
   string strLine;
   ifstream fin("file.txt");
   //Übliche Tests für erfolgreiche Öffnung kommen hierhin

   getline(fin, strLine); //keine Notwendigkeit zum Vorab-Zuweisen

   cout << strLine << endl;

   fin.close();

   return 0;

}

1voto

Puppy Punkte 141483

Es ist nichts Besonderes mehr an 80 Zeichen. Das Festlegen eines Puffers mit fester Größe ist gefährlich und keine gute Idee. Auch wenn das Terminal nur 80 Zeichen anzeigen wird, sollte man es dem Terminal überlassen, sich darum zu kümmern.

Der Grund, warum du das Konzept nicht verstehen kannst, liegt daran, dass es eigentlich nicht mehr existiert.

1voto

James Kanze Punkte 146902

Ich denke, du kannst daraus schließen, dass dein Professor seit Ende der 1980er/Anfang der 1990er Jahre nicht mehr an einem Computer gearbeitet hat, zumindest. Vor langer Zeit (als ich C lernte) waren Zeilen auf dem Bildschirm 80 Zeichen lang (weil Lochkarten 80 Zeichen waren); es war eine Hardware-Beschränkung, und es gab nichts, was du dagegen tun konntest. (Es gab auch kein '{', '}' oder '|' auf der Tastatur. Das erschwerte auch die Bearbeitung von C-Code etwas.)

Heutzutage können Zeilen natürlich beliebig lang sein; auch damals konnten Zeilen in einer Datei beliebig lang sein, und Editoren verwendeten entweder horizontales Scrollen oder Zeilenumbrüche, um sie anzuzeigen. Und C++ hat einen Standardtyp, std::string, der dies sehr gut handhabt: du verwendest nicht fin.getline(buffer), sondern std::getline(fin, buffer), wobei buffer als std::string deklariert ist, und du musst dir keine Gedanken über die Länge machen. (Fast. Wenn du auf eine Zeile stößt, die mehr als ein paar Milliarden Zeichen lang ist, wirst du wahrscheinlich auf Probleme stoßen.)

Mein Vorschlag ist, einen anderen Professor zu finden, denn entweder hast du etwas falsch verstanden oder falsch interpretiert, was er gesagt hat, oder er scheint nicht zu wissen, wovon er spricht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X