Hilfe: Programm funktioniert nicht wenn ein cout befehl fehlt
-
cout<<""; verwendet man gerne, um den Optimierer in die Knie zu zwingen. Damit leere Schleifen nicht wegoptimiert werden.
Dein Prog bewertet 7 bei mir im Debug-Modus als Primzahl und im Release-Modus als Nicht-Primzahl.
Das deutet darauf hin, daß Du was gemacht hast, was undefiniertes Verhalten erzeugt. Auf Anhieb sehe ich, daß sum nicht initialisiert wurde. Ob's das schon war?
-
Du hast zumindest mal einen klassischen Anfängerfehler gemacht:
error C4700: uninitialized local variable 'sum' used
-
Sone schrieb:
cout <<""; //<--Wenn ich diese Zeile lösche funktioniert das Programm nicht mehr :(Das ist nicht möglich. Dieses Statement hat praktisch überhaupt keine Auswirkung auf dein Programm.
Gib mal eine genaue Fehlerbeschreibung. Ich versuche gleich mal, das Programm zu starten und sehe es mir an.Ein Problem bei deinem Code ist, dass du Fließkommazahlen verwendest, obwohl du das überhaupt nicht brauchst - und dadurch alles durcheinander bringst. Wieso verwendest du also
floatstattunsigned?[/quote]
Das Programm giebt (egal ob Primzahl oder nicht) nur 0 aus anselle von 0 (Keine Primzahl) oder 1 (Primzahl)
Es funktioniert aber auch nicht im Debug modus.Sone schrieb:
Ein Problem bei deinem Code ist, dass du Fließkommazahlen verwendest, obwohl du das überhaupt nicht brauchst - und dadurch alles durcheinander bringst. Wieso verwendest du also
floatstattunsigned?Ich habe (wie bereits gesagt) gerade erst angefangen C++ zu lernen.
Ich wusste bis gerade noch nicht einmal das es etwas wie unsigned giebt.
-
volkard schrieb:
Auf Anhieb sehe ich, daß sum nicht initialisiert wurde. Ob's das schon war?
initialisieren heiß Wert zuweißen, oder ?
Jedenfalls funktioniert das Programm jetzt, habe einfach.int sum;zu
int sum=0;geändert und jetzt Funktioniert es.
Danke für helfen.
-
Du hast ja schon deine Antwort gehabt. Uninitialisierte Variable. Aber wie gesagt, der Rest des Programms ist auch nicht gerade der beste. Warum ein rekursiver Ansatz fuer Primzahlen? Warum float?EDIT: Ich brauch ne Brille oder n groesseren Bildschirm...
bool isPrime(unsigned number) { if(number < 2) return false; for(unsigned i = 2; i < number; ++i) if(number % i == 0) return false; return true; }
-
Aspecsi schrieb:
Sone schrieb:
cout <<""; //<--Wenn ich diese Zeile lösche funktioniert das Programm nicht mehr :(Das ist nicht möglich. Dieses Statement hat praktisch überhaupt keine Auswirkung auf dein Programm.
Gib mal eine genaue Fehlerbeschreibung. Ich versuche gleich mal, das Programm zu starten und sehe es mir an.Ein Problem bei deinem Code ist, dass du Fließkommazahlen verwendest, obwohl du das überhaupt nicht brauchst - und dadurch alles durcheinander bringst. Wieso verwendest du also
floatstattunsigned?Das Programm giebt (egal ob Primzahl oder nicht) nur 0 aus anselle von 0 (Keine Primzahl) oder 1 (Primzahl)
Es funktioniert aber auch nicht im Debug modus.Sone schrieb:
Ein Problem bei deinem Code ist, dass du Fließkommazahlen verwendest, obwohl du das überhaupt nicht brauchst - und dadurch alles durcheinander bringst. Wieso verwendest du also
floatstattunsigned?Ich habe (wie bereits gesagt) gerade erst angefangen C++ zu lernen.
Ich wusste bis gerade noch nicht einmal das es etwas wie unsigned giebt.[/quote]
vergiss erstmal unsigned.
denk dir sones vorschlag mit int.
"wieso verwendest du float statt int" wäre dann die frage.
-
Jonas OSDever schrieb:
Warum ein rekursiver Ansatz fuer Primzahlen?
Da haste aber geschielt, alös Du den rekursiven Ansatz im Programm erkannt hast.
-
Ach Mist, hab statt
iswholeisprimegelesen.
-
@Jonas OSDever
Ich sehe das doch richtig das unsigned(int) für ganze positive zahlen ist, Richtig ?
Ich habe einfach versucht (zu übungszwecken) selber ein Programm zu schreiben das Priemzahlen als solche kennzeichnen kann.
Ich hatte zuerst einen ganz Falschen ansatz um die Primzahlen zu erkennen,
daher die unnötigen float Variabeln.
Ich werde den Code wohl noch einmal aufräumen müssen.
Danke auch dir für die Hilfe .
-
...
-
1 (Primzahl)
Ich glaube, ich habe dich missverstanden.
Edit: Ja, habe ich. Hätte ich dir auch nicht zugetraut, nie nie.
-
...
-
P.S.:
unsignedist die Kurzform vonunsigned int, undunsigned intist praktischint- nur dass keine negativen Zahlen gespeichert werden können, und sich dadurch der Wertebereich für positive Zahlen verdoppelt.