| Autor |
Nachricht |
andi_012
Mitglied
Benutzerprofil
Anmeldungsdatum: 01.04.2012
Beiträge: 2
|
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
|
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
|
.... 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
|
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
|
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
|
SeppJ Moderator
20:07:03 08.04.2012 Titel: |
|
Zitieren |
|
 |
|
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.
|
|
|
|
|