einfaches Primzahlen Programm, Variabeln initialisieren
-
Hallo, in meinem Programm sind wohl noch ein paar Fehler (4?!). Der Compiler sagt mir das ich meinen Variablen einen Startwert geben muss, also initialisieren muss.
Aber warum? In anderen Programmen hatte ich das auch schon ohne gemacht.Hier der Code:
#include <stdio.h> int main(void) { int von, bis, prim, zahl, teiler; printf("Primzahlen von: "); scanf("%d", von); printf("Primzahlen bis: "); scanf("%d", bis); if(von < 2 || von > bis) { printf("Falsche Eingabe!\n"); return 0; } for(zahl = von; zahl <= bis; ++zahl) { for(prim = 1, teiler = 2; teiler * teiler <= zahl; ++teiler) if(zahl % teiler) { prim = 0; break; } if(prim = 1) printf("%d\t", zahl); } return 0; }
Danke!
-
Compiler haben immer Recht. Dein Fehler (zumindest die ersten beiden, die ich sehe) ist: scanf funktioniert so nicht. Noch einmal ein Kapitel zurück im Lehrbuch und noch einmal angucken.
-
Ah Danke, Kaufmannsund fehlt..
irgendwie war ich auf einen "Initialisierungs-Fehler" fixiert.
-
Ärgerlich ist wenn der Compiler keinen Fehler findet, es aber trotzdem falsch ist. Gibt es da Tricks für Laufzeitfehler?
Ich jedenfalls verstehe nicht warum es nicht funktioniert. Führt er meine letzte Schleife überhaupt aus?Das Programm schaut momentan so aus.
#include <stdio.h> int main(void) { int von, bis, prim, zahl, teiler; printf("Primzahlen von: "); scanf("%d", &von); printf("Primzahlen bis: "); scanf("%d", &bis); if(von < 2 || von > bis) { printf("Falsche Eingabe!\n"); return 0; } for(zahl = von; zahl <= bis; ++zahl) { for(prim = 1, teiler = 2; teiler * teiler <= zahl; ++teiler) if(zahl % teiler) { prim = 0; break; } if(teiler = 1) printf("%d\t", zahl); } return 0; }
-
= ist eine Zuweisung.
Der Vergleich auf Gleichheit sieht anders aus.Aber das sollte der Compiler durch eine Warnung mitteilen.
-
...
-
= für Zuweisung
== für GleichheitAlso hab ich nun bei dem Modulo für prim == 0 genommen
geht aber immer noch nichtAlso ich will ja dass er die schleife abbricht wenn der modulo = 0 ist..
Verstehe aber nicht ob das nun der Fall ist.
-
Bei der if-Abfrage nicht in der Zuweisung beim Modulo...
-
Da ich mit dem Debugger irgendwie nicht zurecht komme, habe ich mal eine Hilfszeile eingefügt, die mir den aktuellen Wert von Zahl geben soll.
Bei Visual C++ hab ich nun versucht über "immer einen Schritt weiter" zu Debuggen, aber wie kann ich die Werte meiner Variablen verfolgen?
Leider bringt mich das auch nicht weiter.
Habe nun in der if Schleife das = durch == ersetzt. Aber es muss wohl noch einen Fehler weiter oben geben.
#include <stdio.h> int main(void) { int von, bis, prim, zahl, teiler; printf("Primzahlen von: "); scanf("%d", &von); printf("Primzahlen bis: "); scanf("%d", &bis); if(von < 2 || von > bis) { printf("Falsche Eingabe!\n"); return 0; } for(zahl = von; zahl <= bis; ++zahl) { for(prim = 1, teiler = 2; teiler * teiler <= zahl; ++teiler) printf("aktueller wert von zahl", zahl); //*Hilfszeile*// if(zahl % teiler) { prim = 0; break; } if(teiler == 1) printf("%d\t", zahl); } return 0; }
-
Das
if(zahl % teiler)
bedeutetif((zahl % teiler) != 0)
Also wenn bei der Divison ein Rest rauskommt, ist die Bedingung wahr und der Code dahinter wird ausgeführt.