Fehlermeldung in DevC++

Gast #2223962
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
Angehängte Dateien:
Gast #2224066
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.
Gast #2224081
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...
Gast #2224359
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
Angehängte Dateien:
Gast #2224428
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.
Angehängte Dateien:
Gast #2224433
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren