C++ brauche Hilfe

06/01/2010 19:48 koal89#1
Hi Com.

Also ich hab ein Problem bei C++ bei dem ich eure Hilfe brauche.
Ich hab also ein Textdokument wo z.B. in der ersten zeile Hansi, in der 2ten Fred und in der 3ten Seppi drinnen steht.

Das C++ Programm soll das Textdokument lesen, und ausgeben. Ich schaff dass er das genau so ausgiebt wie es im textdoc steht. Also so:

Hansi
Fred
Seppi

Ich soll es aber so ausgeben das jede Zeile ne überschrift hat. Sieht dann c.a so aus:

Zeile 1
Hansi
Zeile 2
Fred
Zeile 3
Seppi


Wie schaff ich das?
Mein Prog sieht ohne Überschriften bis jetzt so aus:

int main(int argc, char **argv)
{
int i;
char c;

FILE *Datei;
char DateiName[80];
printf("\nDateiName: ");
scanf("%s",DateiName);

Datei=fopen(DateiName,"r");
if (Datei==NULL)
printf("Fehler beim oeffnen der Datei %s",DateiName);
else
while ((c=getc(Datei))!=EOF)
{
printf("%c",c); // --> damit gib ich das Dokument 1 zu 1 aus. Mir fehlen aber noch die Überschriften. Wie mach ich die?

}



getch();


return 0;
}


hoffe ihr könnt mir helfen.. Bin nicht so der c++ könner also pls keine komplizierten erklärungen wenns geht^^ Am besten wäre es wenn ihr es in meinen Quelltext einbaut, es postet und mir erklären könnt wie das geht.

Lg
Der c++ Noob^^
06/01/2010 20:51 xNopex#2
C++ -> fstream, string:


Code:
#include <iostream>
#include <fstream>
#include <string>

using namespace std;


int main()
{
    string file;
    cout << "Dateiname: ";
    getline( cin, file );
    ifstream in( file.c_str() );
    if( ! in.good() )
        return 1;
    for( int i = 1; ! in.eof(); i++ )
    {
        cout << "Zeile " << i << "\n";
        string temp;
        getline( in, temp );
        cout << temp << "\n";
    }
    in.close();
}
06/01/2010 20:56 MrSm!th#3
Code:
string tmp;
in >> tmp;
cout << "Zeile" << i << "\n" << tmp << endl;
>> tuts übrigens auch, da du ja jeden Namen in einer neuen zeile hast.
so wird direkt, bis der string zuende ist, eingelesen.
06/01/2010 21:03 P-a-i-n#4
ich hätte es so gemacht

lese lieber zeichen aus so hat man weniger arbeit

PHP Code:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
  
ifstream datei// deklarration
  
string dateiname("C:\\Users\\Pain\\Desktop\\test.txt");// welche datei eingelesen werden soll wictig die doppel \\ 
  
cout << "Datei einlesen \n";


  
datei.open(dateiname.c_str(), ios_base::in); //datei mit dem eingabe stream verbinden und zum lesen öffnen
  
  
if(!datei// wenn datei nicht gefunden wird 
  
{
     
cout << "Datei konnte nicht geoeffnet werden!"// ausgabe
     
cout << endl//ausgabe
     
return -1
  }

  
char zeichen;

  while (!
datei.eof())// whirlschleife das eof gibt ein true zurück wenn datei zuende gelesen ist und die schleife wird beendet will sie dann nicht mehr ungleich ist
  
{
    
datei.get(zeichen); // hier wird zeichen für zeichen eingelesen mit diesem get() wenn zeilen würde es bei einer bei großen leerzeilen abbrechen ;)
    
cout << zeichen // für buchstaben untereinander das-> cout << zeichen << endl;
  
}


  
datei.close(); // und die datei schließen 
  
getchar(); // das muss man nicht unbedingt machen starten ohne debuggen hält die konsole auch auf in VC++ strg + F5 ;)

  
return 0;

06/02/2010 17:24 MrSm!th#5
nun wirds aber overkill.
er woll nur einzelne namen ausgeben + Zeile 1 etc.

da ist ifstream operator >> bestens geeignet
06/02/2010 18:03 P-a-i-n#6
was macht es den denkste er schreibt alles untereinander ^^
ich hab ihn extra das gegeben wenn er den source etwas abändert aus dem ios:base::in ein out macht die schleife löscht das instream in ofstream ändert und unten datei << "blabla"; macht kann er sogar es speichern :P
man soll es sich immer leicht machen und nicht mit der kirche ums dorf ziehen :P

wieso schwer machen wenn man es sich leicht machen kann und mit kleinen veränderung auch das gegenteil erreicht

[Only registered and activated users can see links. Click Here To Register...]
06/02/2010 18:34 Adroxxx#7
Hat nichts mit Gamehacking zu tun.
#moved nach coders
06/03/2010 01:33 MrSm!th#8
Quote:
Originally Posted by P-a-i-n View Post
was macht es den denkste er schreibt alles untereinander ^^
ich hab ihn extra das gegeben wenn er den source etwas abändert aus dem ios:base::in ein out macht die schleife löscht das instream in ofstream ändert und unten datei << "blabla"; macht kann er sogar es speichern :P
man soll es sich immer leicht machen und nicht mit der kirche ums dorf ziehen :P

wieso schwer machen wenn man es sich leicht machen kann und mit kleinen veränderung auch das gegenteil erreicht

[Only registered and activated users can see links. Click Here To Register...]
warum denn bitte schwer???
dein code ist komplizierter als der mit ifstream operator >>
und ja klar macht er es untereinander, guck doch in den ersten post.
wenn du ofstream operator << nimmst, wirds passend dazu auch gespeichert, ein string pro zeile, genau so, wie es im startpost gefragt ist.

keine frage, deine variante ist flexibler, allerdings hierfür unnötig.
06/03/2010 03:37 P-a-i-n#9
das ist mir voll wurst was passt und was nicht
1 wichtig ist das es geht
2 ich konnte meins erklären er wollte eine erklärung er hat sie gekriegt
3 für anfänger sind for schleifen weit schwerer zu verstehen
achso ich vergas und du hast ja immer recht sorry GOTT
06/03/2010 16:30 MrSm!th#10
Quote:
Originally Posted by P-a-i-n View Post
das ist mir voll wurst was passt und was nicht
ist aber nicht gerade produktiv...
Quote:
1 wichtig ist das es geht
stimmt. habe ich etwas dagegen gesagt oder habe ich gesagt, dass hierfür operator >> besser geeignet ist?
Quote:
2 ich konnte meins erklären er wollte eine erklärung er hat sie gekriegt
ich habe doch nur einen verbesserungsvorschlag gemacht.
es gibt keinen grund, ausfallend zu werden, nur weil ich gesagt habe, dass es hierfür ein overkill ist ;)
Quote:
3 für anfänger sind for schleifen weit schwerer zu verstehen
woher hast du das denn?
findest du nicht, etwas größere codes, so wie deiner sind schwerer zu verstehen? klar, er ist kommentiert, aber ich rede vom code selbst.
eine for schleife kann man ja auch kommentieren.
Quote:
achso ich vergas und du hast ja immer recht sorry GOTT
nunja, nicht immer, aber meistens.
liegt daran, dass ich meistens entweder erst gar nicht diskutiere, wenn ich weiß, dass ich unrecht habe oder dass ich meine meinung zwischendurch ändere, weil mir selbst klar geworden ist, dass die alte nicht ganz gepasst hat.
so habe ich am ende fast immer den standpunkt, der bei einer frage, bei der es einen richtigen gibt, der richtige ist.
gibt aber auch situationen, in denen ich unrecht habe und mich auch korrigieren lasse ;)
aber wie gesagt, es gibt doch keinen grund ausfallend zu werden, ich habe weder dich kritisiert, noch deinen code.
ich habe lediglich gesagt, dass es hierfür ein overkill ist und für einen anfänger vielleicht noch zu kompliziert.