Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Linux/Unix ::  ifstream Probleme unter Linux     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
andi_012
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.04.2012
Beiträge: 2
Beitrag andi_012 Mitglied 10:51:52 07.04.2012   Titel:   ifstream Probleme unter Linux            Zitieren

Ich programmiere gerade ein Pacman Klon unter Ubuntu Linux mit Geany (Programm).
Nun möchte ich eine Karte aus einer Datei einlesen die wie folgt aussieht:

SOMOOOMOMMMOOO
MOMMMOMOOOMOMM
OOMOOOMOMOMOMO
OMMOMOMOMOOOOO
OOOOMOOOMMMOMM
MMMMMOMOOOMOOO
MOOOOOMMMOMMMM
OOMMMMMOOOOOOM

S = Spieler Startpunkt
O = Bonuspunkt
M = Mauerelement

Ich habe schon einiges ausprobiert. Bsp:
C++:
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
int main()
{
     ifstream f;
     int counter = 0;
    char cstring[256];
    f.open("Karte1.map", ios::in);
    while (!f.eof())
    {
        f.getline(cstring, sizeof(cstring));
       
        for (int a=0;a<=8;a++)
        {
            for(int b=0; b<=16; b++)
            {
                if(cstring[a] == 'M')
                {
                    counter++;
                }
            }
        }
 
    }
    cout << counter << endl;
    f.close();
    return 0;
}


Aber irgendwie haut das alles nicht hin und ich habe im Moment keinen anderen Lösungsansatz. Kann man das nicht irgendwie anders lösen?
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17955
Beitrag SeppJ Moderator 11:52:34 07.04.2012   Titel:              Zitieren

Definiere "Haut irgendwie nicht hin". Lies dir vorzugsweise auch einmal den ersten Link in meiner Signatur durch.

Zitat:
Kann man das nicht irgendwie anders lösen?
Auf jeden Fall. Dein Code sieht stark nach dem gefuerchteten C mit cout aus. Benutze konsequent die C++-Sprachmittel, insbesondere die C++-Standardbibliothek, definiere saubere Klassen und mach dich ueber die feinen Unterschiede zwischen C++-Streams und C-Dateien kundig (while (!cplusplusstream.eof()) ist zum Beispiel von der Programmlogik her falsch). Bemuehe dich auch um einen sauberen Stil, zum Beispiel Vermeidung magischer Zahlen.

Ausserdem gehoert die Frage eher ins C++-Forum.

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List


Zuletzt bearbeitet von SeppJ am 11:53:54 07.04.2012, insgesamt 1-mal bearbeitet
....
Unregistrierter




Beitrag .... Unregistrierter 14:32:54 07.04.2012   Titel:              Zitieren

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    ifstream f("Karte1.map");
    int counter = 0;
    string line;
    while (getline(f, line)) {
        for (int a = 0; a < line.length(); a++) {
            if(line[a] == 'M') {
                counter++;
            }
        }
    }
    cout << counter << endl;
}
rüdiger
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 23067
Beitrag rüdiger Moderator 14:48:28 07.04.2012   Titel:              Zitieren

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <algorithm>
#include <iterator>
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main() {
  ifstream f("Karte1.map");
  if(not f) {
    cerr << "File not found\n";
    return 1;
  }
  unsigned const counter = count(istream_iterator<char>(f),
                                 istream_iterator<char>(),
                                 'M');
  cout << counter << endl;
}


Zuletzt bearbeitet von rüdiger am 14:48:51 07.04.2012, insgesamt 1-mal bearbeitet
andi_012
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.04.2012
Beiträge: 2
Beitrag andi_012 Mitglied 19:47:40 08.04.2012   Titel:              Zitieren

Ich habe das ganze jetzt über einen string gelöst den ich dann in ein char umwandel und nach den einzelnen Zeichen durchsuchen lasse. Funktioniert ganz gut hat aber noch seine Macken.


Zuletzt bearbeitet von andi_012 am 19:48:31 08.04.2012, insgesamt 1-mal bearbeitet
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17955
Beitrag SeppJ Moderator 20:07:03 08.04.2012   Titel:              Zitieren

andi_012 schrieb:
hat aber noch seine Macken.
Ja, zum Beispiel, dass du den string in char(-Array?) umwandelst. Wozu?

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List
c++.de :: Linux/Unix ::  ifstream Probleme unter Linux   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.