Ich versuche seit kurzer Zeit C++ zu erlernen.
Allerdings habe ich jetzt ein Problem das ich nicht ganz verstehe. Das Ziel des Codes ist es das man irgendeine Zahl eingibt bei der dann überprüft wird ob sie durch 4, 100 und/oder 400 teilbar ist. (Soll überprüfen ob es ein Schaltjahr ist)
Mein Problem ist: Ich benutze für die Überprüfung eine bool-Variable, wenn ich aber in einem if überprüfen will ob es true ist bekomme ich die Fehlermeldung
"'==': unsichere Kombination von Typ 'bool (__cdecl *)(int)' mit Typ 'bool' in einer Operation"
"'==': Keine Konvertierung von 'int' in 'bool (__cdecl *)(int)"
"Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat"
Daraus schließe ich das ich die die boolsche Variable falsch verwende aber ich sehe nicht wo.
Könnte mir jemand vielleicht sagen WAS ich falsch mache?
Fehler ist die Zeile if (schaltjahr == true). Wenn du schaltjahr so verwendest, kriegst du die Stelle im Speicher, wo der Code der Funktion anfängt. Du willst die Funktion aber ja eigentlich aufrufen und das Ergebnis verwenden. Richtig wäre daher if (schaltjahr(eingabe) == true) oder kürzer if(schaltjahr(eingabe)). Die Zeile schaltjahr(eingabe); fällt dementsprechend weg. Die hieße, dass du berechnest, ob die Eingabe ein Schaltjahr ist und das Ergebnis dann wegwirfst.
Ich weiterer Fehler ist in der Zeile "int ist = bool;" bool ist ein Typ und hat keinen Wert, du versuchst also einer Variable vom Typ int mit dem Typ bool zu initialisieren. Richtig wäre "bool ist;"
Weil das Weglassen der Klammern bei Funktionen ohne Parameter und die Reihenfolge erst Variablenname, dann Typ bei beiden Sprachfamilien nicht ganz unüblich ist.
Ich kenn mich zwar mit C/C++ nicht besonders aus aber ist da nicht ein algorithmischer Fehler drinnen?
Wie ich das sehe, wird doch bei der Schaltjahrabfrage immer der vorherige Wert überschrieben. Also müssten, laut diesem Algorithmus, alle Jahre, die durch 400, mit Rest 0 teilbar, sind ein Schaltjahr sein, was aber nicht stimmt.
Öhm doch, das passt so. Schaltjahre sind Jahre, die durch 4, aber nicht durch 100 teilbar sind. Außer sie sind auch durch 400 teilbar.
Das wäre:
Was exakt Miveys Code entspricht.
Edit: dein Code ist schon deshalb unlogisch, weil alles, was durch 400 teilbar ist, auch garantiert durch 100 und 4 teilbar ist. Demnach würde sich deine erste Zeile (durch das && und das ||) auf if(jahr % 100 == 0) verkürzen. Nicht so ganz korrekt. Von den Syntaxfehlern mal abgesehen. Ist ja nur Pseudocode.
Edit: dein Code ist schon deshalb unlogisch, weil alles, was durch 400 teilbar ist, auch garantiert durch 100 und 4 teilbar ist. Demnach würde sich deine erste Zeile (durch das && und das ||) auf if(jahr % 100 == 0) verkürzen. Nicht so ganz korrekt. Von den Syntaxfehlern mal abgesehen. Ist ja nur Pseudocode.
...
ah, sorry. So meinte ich es auch, hab aber die Negation vergessen ^^"
edit: Bei Miveys Algorithmus würde ich ist noch vorher einen Wert zuweisen, da es hier zu Problemen würden kann. Bsp:
Jahr = 7
Jahr % 4 = 3 -> ist bleibt unverändert
Jahr % 100 = 7 -> ist bleibt unverändert
Jahr % 400 = 7 -> ist bleibt unverändert
ist wird also nie gesetzt und im Speicher steht dann irgendwas.
Oder setzt C/C++ automatisch den Wert, für eine Variabel, auf 0?