Forum: PC-Programmierung Fehlermeldung in DevC++


von Richard (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe ein Spiel in C programmiert, indem man sich im Leben 
hocharbeiten muss.
DevC++ sagt, es hätte 2 Fehler vor 2 "if's" gefunden und wäre durch 
frühere Fehler verwirrt. Meiner Meinung nach sind da aber gar keine 
Fehler. Wenn ich eine geschweifte If-Klammer lösche(dort wo einer der 
Fehler angezeigt wird), kompiliert es zwar, mein Spiel funktioniert aber 
nicht mehr so wie ich das will.
Habe den Code mal als Anhang angefügt.

Würde mich sehr über Hilfe freuen,
Richard

von Peter II (Gast)


Lesenswert?

welcher fehler bekommst du?

Bitte Fehler und Zeilennummer Posten!

Der code ist höflich ausgedrückt nicht sehr sinnvoll organisiert. Das 
ganze lässt bestimmt wesentlich vereinfachen.

von Hungriger Hugo (Gast)


Lesenswert?

Probier mal die CodeBlocks IDE, DevC++ ist böse verbuggt.

von chivas (Gast)


Lesenswert?

Richard schrieb:
> Wenn ich eine geschweifte If-Klammer lösche(dort wo einer der
> Fehler angezeigt wird), kompiliert es zwar, mein Spiel funktioniert aber
> nicht mehr so wie ich das will.

Das Problem liegt nicht (nur)* in den Kontrollstrukturen sondern (auch)* 
in deinen do-while Schleifen.
Der Block der ersten Schleife aus Zeile 13 endet in Zeile 720. Die 
Abbruchbedingung steht aber ersten nach weiteren Abfragen und Klammern 
in Zeile 799 und somit etwas deplaziert. Genauso sieht es mit der 
zweiten Schleife aus Zeile 25 aus, die laut Klammerung in Zeile in Zeile 
472 enden sollte. Da steht aber auch keine Abbruchbedingung. Stattdessen 
folgt eine weitere Kontrollstruktur.

Das eigentliche Problem wurde schon von Peter II angedeutet. Ich würde 
an deiner Stelle den Code besser strukturieren und einzelnen Aufgaben in 
separate Funktionen auslagern. Dafür sind sie (unter Anderem) da und das 
Debuggen geht einem auch etwas leichter von der Hand.


*Ob es noch weitere Probleme bspw. bezüglich der Klammerung der 
if-Abfragen gibt habe ich nicht weiter kontrolliert. Nach der zweiten 
falschen Klammerung der Schleifen habe ich aufgehört.

von Jochen Z. (Gast)


Lesenswert?

dev-c++ habe ich in der ausbildung mal benutzt.. und fands nicht so 
toll.. außerdem wirds seit über 6 jahren nicht mehr gepflegt. kann 
eclipse oder netbeans empfehlen. ferner würde den code wie oben erwähnt 
mal anders strucktieren.

was u.a. arg ins auge sticht:

if (foo == 1) {
if (bar == 0) {
if (test > 0) {
blabla
}
}
}

einfach mal in sowas wie
if (foo == 1 && bar == 0&& test >0) {...}

grob gesagt...

von Richard (Gast)


Angehängte Dateien:

Lesenswert?

Viele Dank für die zahlreichen Antworten!
Ich habe den Fehler gefunden:
Eine versteckte If-Klammer(hinten an ein continue rangequetscht).
Ich benutze jetzt auch CodeBlocks, ist wirklich komfortabler. Die ersten
Ifs habe ich jetzt verkürzt, da ich aber noch Anfänger bin, sehe ich
keine Möglichkeit das Skript noch weiter zu schrumpfen. Ich nehme an das
würde mit Schleifen gehen, ich habe aber keine Ahnung wie man das lösen
könnte.

Noch ein Problem:
Wenn man über 50000$ hat, wird angezeigt das man einen Vertrag mit einem
Riesenunternehmen eröffnen kann. Dies kann man auch gut bestätigen. Pro
Tag sollen dann 10000$ auf das eigene Konto überwiesen werden.

Konto=Konto+10000

Aber nachdem man geschlafen hat, werden zu dem Konto weniger als 10000$
dazuaddiert.
Woran kann das liegen?

Wäre schön wenn ihr mir nochmal helfen könntet,
im Vorraus schonmal Danke.

Richard

von Peter II (Gast)


Lesenswert?

Richard schrieb:
> sehe ich
> keine Möglichkeit das Skript noch weiter zu schrumpfen.

ich schon.
1
 system("CLS");
2
 ...
3
 getchar();

diese sequenz kommt bestimmt 1000mal in deinen code vor. Warum machst du 
das in jeder IF-Abfrage und nicht nur einmal in der Schleife?

von Vlad T. (vlad_tepesch)


Lesenswert?

was soll das ständige neuinitialisieren des Zufallsgenerators?

das macht man genau ein mal am Programmanfang.

von abc (Gast)


Angehängte Dateien:

Lesenswert?

Weil mir gerade sehr langweilig war hab ich einen Teil(!) mal etwas 
umgeschrieben (andere würden verbessert sagen). Gucks dir genau an und 
frag wenn Fragen sind, auf große Kommentare hatte ich keine Lust.

Neben den oben erwähnten Sachen (if if if, srand() und cls):

- Du solltest switch-case benutzen (wobei man darüber diskutieren 
könnte).
- Deine if-Abfragen lassen sich mit else if deutlich vereinfachen.
- scanf direkt in einer do-while-Schleife kapseln um Fehleingaben 
abzufangen.
- Die Farbgeschichte (Danke dafür, den Trick kannte ich nicht!) habe ich 
deutlich verkürzt.
- Bei MS gibts irgendwo eine cls-Funktion die auf ein paar API-Aufrufen 
beruht und deutlich schneller ist.
- Ein paar Sachen wie if(!a) statt if(a==0) sind Geschmacksache, ich bin 
halt faul und !a ist kürzer (beides ist gleichwertig und richtig).
- Die Sache mit den Sonderzeichen: Br\x81 cke ergibt Brü cke, aber 
Br\x81cke ergibt eine Warnung wie du vermutlich festgestellt hast... 
Lösung: Br""\x81""cke (nicht schön aber selten).
- ...?

Ohne Gewähr und Garantie. Ungetestet. Insgesamt ist der Code für die 
gegebene Funktion imho zu lang, ich habe aber keine Idee wie man das 
deutlich eleganter und kürzer kriegen könnte ohne allzuviel 
Komplexität reinzubringen. Eventuell irgendwas mit Arrays und 
Funktionen, aber das wird auch schnell undurchsichtig.

von abc (Gast)


Lesenswert?

Übrigens, das nächste mal vielleicht die kompletten Namen aus dem Code 
entfernen bevor man ihn veröffentlicht...

Und wenn ich mir so den ersten switch-case ansehe, das ist viel zu 
lang, da muss eine Funktion hin um etwas aufzuräumen. Ich war irgendwie 
zu faul das zu Tippen und mit Pointern (ohne gehts nicht wenn man die 
Variablen in der Funktion ändern will) rumzubasteln. :-( Nein, globale 
Variablen sind keine Lösung - frag mal Karl-Heinz was er sonst macht!

von abc (Gast)


Lesenswert?

Gerade gesehen: Die Syntaxhervorhebung vermurkst irgendwie die 
Einrückungen (Tabulator  duckundweg), in Programmer's Notepad oder 
CodeBlocks passts.

So, genug Beiträge hintereinander verfasst.

von abc (Gast)


Lesenswert?

Ein "Danke" ist wohl zu viel verlangt wie?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

abc schrieb:
> Ein "Danke" ist wohl zu viel verlangt wie?

Scheint so, aber wenn man die (mehrfach mit unvollständigen 
Informationen) Fragenden etwas unwirsch angeht, ist das Geheule groß, 
daß die Umgangsformen in diesem Forum ja so schlimm wären.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.