Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C++: getline speichert ausgelesene Zeile nicht im Buffer

Empfohlene Antworten

Veröffentlicht

Hallo zusammen, ich habe folgendes Problem:

ich möchte in einem C++-Programm eine HTML-Seite erzeugen, da gibt es aber wohl einen Haken, der mir nicht ersichtlich ist:

Der HTML-Code(Dateiname: test1.htm):


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head><title>Testseite</title></head>

  <body><p>Hallo Welt</p></body>

</html>

Der C++-Code:

#include<iostream.h> 

#include<conio.h>

#include<string.h>

#include<fstream.h>


void main()

{

  string buffer = "Test";

  ifstream load( "test1.htm" );

  getline( load, buffer );

  load.close();

  cout << "Content-Type: text/html\r\n\r\n";

  cout << buffer;

} 

Wenn ich mir den Inhalt meines Buffers aus dem C++-Programm in der Dos-Box ausgeben lasse, zeigt er mir auch den richtigen Inhalt der HTM-Datei an. Möchte ich aber die HTM-Datei im Browser erzeugen lassen, zeigt er mir dort nur den Wert an, mit dem ich den Buffer ursprünglich initialisiert habe. Also Ausgabe = Test. Als ob ich die getline Funktion überhaupt nicht angewendet hätte. :confused:

Ich möchte das aber unbedingt so machen, weil ich es hässlich finde, wenn 100 Zeilen HTML-Code in der C++-Datei stehen. Das habe ich natürlich trotzdem ausprobiert. Und dann wird die Seite auch richtig erzeugt. Aber wie gesagt, diese Art würde mir nicht sehr gefallen. Es wird auch benotet, da es eine Projektarbeit für die Schule ist.

Hat vielleicht jemand eine Erklärung dafür, warum das mit der getline-Funktion nicht so richtig klappt? Ich wäre euch sehr dankbar!:)


#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<fstream.h>[/code] Die Header heißen <iostream>, <string> und <fstream>, ohne ".h". <conio.h> ist nicht standardisiert, du benutzt aber auch keine Funktion aus diesem Header, die Includedirektive kann also weg. Zudem befinden sich alle Bezeichner der Standardbibliothek im Namensraum std, es muss also std::ifstream, std::string, std::cout usw. heißen. Du kannst auch vor oder in main eine using-Direktive für den Namespace std benutzen:
[code]using namespace std;

Bei größeren Programmen ist das aber nicht empfehlenswert.

Außerdem muss die main-Funktion den Rückgabetyp int haben.

Zum eigentlichen Problem: Ich vermute, dass bereits das Öffnen der Datei fehlschlägt. Prüf doch mal den Status des Streams nach dem Öffnen und nach getline.

  • Autor

Vielen Dank Klotzkopp,

aber wenn du das liest, fällst du wahrscheinlich vom Stuhl.

Das Problem war dieses: Ich habe von meinem C++-Programm nur die exe-Datei im cgi-bin Verzeichnis des Servers gespeichert, nicht aber die htm-Datei test1. :upps

Ist noch alles neu für mich, mein Ausbilder hat aber auch erst mal eine halbe Stunde herumgerätselt

Hab' trotzdem Dank, dass du geantwortet hast! :)

aber wenn du das liest, fällst du wahrscheinlich vom Stuhl.
Nein, genau so etwas habe ich erwartet. Und wenn du so kritische Dinge wie das Öffnen von Dateien im Code ordentlich behandelt hättest, hättest du vermutlich viel schneller gemerkt, wo das Problem ist. ;)

Die anderen Dinge, die ich angemerkt habe, solltest du übrigens auch umsetzen. Und sei es nur deshalb, damit sich dein Programm auch später noch übersetzen lässt, wenn du einen etwas aktuelleren Compiler verwendest.

  • Autor

Die hatte ich auch als erstes umgesetzt, nur hat das dadurch natürlich trotzdem mein (nun bekanntes) Problem nicht behoben. Aber auf jeden Fall danke! Das werde ich ab jetzt berücksichtigen.:)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.