Du bist nicht angemeldet.

Werbeanzeige

Anonymous

unregistriert

1

22.08.2004, 10:55

Dateihandlingproblem

Hallo,
am besten komme ich sofort zu Sache. Wenn ich die Zeile 12 auskommentiere überspringt der Compiler die Eingabe. Kann mir jemand sagen wieso?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1:     #include <fstream.h>
2:     int main()
3:     {
4:        char fileName[80];
5:        char buffer[255];    // fuer die Benutzereingabe

6:        cout << "Dateiname: ";
7:        cin >> fileName;
8:
9:        ofstream fout(fileName);  // zum Schreiben oeffnen

10:       fout << "Diese Zeile wird direkt in die Datei geschrieben...\n";
11:       cout << "Bitte Text fuer die Datei eingeben: ";
12:       cin.ignore(1,'\n');  // Neue Zeile nach dem Dateinamen entfernen

13:       cin.getline(buffer,255);  // Benutzereingabe einlesen

14:       fout << buffer << "\n";   // und in die Datei schreiben

15:       fout.close();     // Datei schliessen, bereit zum erneuten Oeffnen

16:
17:       ifstream fin(fileName);    // zum Lesen erneut oeffnen

18:       cout << "So lautet der Inhalt der Datei:\n";
19:       char ch;
20:       while (fin.get(ch))
21:          cout << ch;
22:
23:       cout << "\n***Ende des Dateiinhalts.***\n";
24:
25:       fin.close();            // Ordnungssinn zahlt sich aus

26:     return 0;
27:    }


Vielen Dank im voraus


der dude :-)

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

22.08.2004, 17:48

lass mal das ignore weg. das brauchst du nicht.

p.s.: BITTE lass das *.h weg hinter <fstream> und evtl. auch hinter <iostream> Die dinger sind veraltet und gehören verboten ;)

Nox

Supermoderator

Beiträge: 5 282

Beruf: Student

  • Private Nachricht senden

3

22.08.2004, 18:51

Was ist an dem h so schlimm ???

4

22.08.2004, 18:57

Das ist schlechter Stil ;)

Nox

Supermoderator

Beiträge: 5 282

Beruf: Student

  • Private Nachricht senden

5

22.08.2004, 19:40

huuuuuu, das ist das letzte was mich interesiert, denn den Enduser intersiert nur die Leistung und das Aussehen.

Klaus

Treue Seele

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

6

23.08.2004, 15:51

Gabs nicht oft genug schon die Diskussion, dass das eben *nicht nur* schlechter Stil ist, sondern die .h Header tatsählich ältere Versionen sind, bei der Sachen nicht korrekt funktionieren, oder entgegen den neuen Versionen noch fehlen...
Es würde demnach also doch sehr viel Unterschied für dich als Programmierer machen, welche Version du benutzt. Die Änderung gibts ja nicht zum Spaß

edit/ps: Ich erinnere mich gerade noch daran, dass die neuen Header allesamt im Namespace std sind, die alten hingegen keinen Namespace haben. Könnt mich aber auch irren xD ??? :wirbel:
Mozilla Firefox
The Browser - reloaded

Nox

Supermoderator

Beiträge: 5 282

Beruf: Student

  • Private Nachricht senden

7

23.08.2004, 16:15

tzzzz...... dann frage ich warum es die alten dann noch gibt? Und das mit dem Namespace zuckt mcih wenig da ich ehrlich gesagt keinen schimmer hab was das sein soll :roll: (bin bis jetzt aber nit daran gestorben das ich es nit weiß)

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

8

23.08.2004, 19:09

Zitat von »"Nox"«

huuuuuu, das ist das letzte was mich interesiert, denn den Enduser intersiert nur die Leistung und das Aussehen.


Wenn das Programm abschmiert bei dem Kunden und er sich an dich wendet und du nach 2 Wochen suche endlich den Fehler gefunden hast und drauf kommst das es die alten Header waren, würde es ihn schon interessieren wieso er "schlechte" Qualität bekommen hat. Spreche da aus eigener Erfahrung!

Nebenbei: Die Header gibt es nur noch aus einem einzigen Grund. Der Abwärtskompatibilität.

edit: Namespaces kann man als "Nachnamen" vergleichen für C++:
Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int x = 33;  // Globaler Namespace kann so aufgerufen werden ::x = 22;


namespace Nox // "Nachname" "Nox"

{
   int x = 55; // Variable kann nur so aufgerufen werden Nox::x = 33; oder mit einer using-direktive

}

namespace Patrick // "Nachname" "Patrick"

{
   int x = 77; // Variable kann nur so aufgerufen werden Patrick::x = 33; oder mit einer using-direktive

}

// Benutzung:

::x = 9999; // Globaler Namespace, also Kein Nachname

Nix::x = 333; // Variable aus dem Namespace Nox

usw.


Namespaces sind extrem praktisch! man kann z.B. für eine WrapperAPI folgendes machen, einen Namespace Linux, Windows usw.

Oder bestes Beispiel bei mir momentan:
Engine hat den namen "Loki" und benutzt einen vector intern für 4 Dimensionen, benutzt wird er so:
loki::vector
das selbe mit matrizen:
loki::matrix
oder quaternions:
loki::quaternion

usw.

Also Praktisch und sollte man nicht in die ecke drücken ;)

Klaus
mit H haben keinen Namespace und benutzen veraltete Versionen die sogar mit C gekapselt sind!

Ohne H liegen alle im namespace std und sind die neusten Versionen und werden bei jeder neuen ISO Konferenz aktuallisiert, während die mit H nicht (die wurden meines Wissens das letzte mal 1996 Aktuallisiert)

-Patrick

Nox

Supermoderator

Beiträge: 5 282

Beruf: Student

  • Private Nachricht senden

9

23.08.2004, 19:16

Jetzt hilf mir mal auf die sprünge, für die abwertskompatibilität braucht man doch nur die alten Libery und nicht die headerdateien, da diese doch nur zum entwickeln wichtig sind. Wenn man die weg lässt würden auch keine Fehler in dieser hinsicht gemacht werden. Und wie heißen die neuen Headerdateien?

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

10

23.08.2004, 19:23

zum Thema Lib/Header: Jain, viele Bücher bringen leider noch immer die variante mit dem H und bevor überall jeder zugespammt wird wieso es diese Header nicht mehr gibt, lässt man sie. Nebenbei: Oft werden sogar noch die Header gebraucht

Wie die neuen Header lauten?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
alt                 neu
<assert.h>          <cassert>
<math.h>            <cmath>
<stdlib.h>          <cstdlib>
<stdio.h>           <cstdio>
<iostream.h>        <iostream>
<string.h>          <string>
<fstream.h>         <fstream>
usw.

Werbeanzeige