voldemort Geschrieben 7. November 2009 Geschrieben 7. November 2009 hallo zusammen, in der überschrift seht ihr das ich an einem programm mit funktion und array sitze. das programm ist so weit fertig, jedoch sagt mir visual studio beim debuggen "Debug Error! Run-Time Check Failure #3 - The variable 'rest' is being used without being initialized." nach der fehler angabe hat er anscheinend probleme mit meiner variabel "rest" weil sie nicht initialisiert wird. ich versteh nun nicht ganz warum. vielleicht könnt ihr mir helfen. int primzahlcheck (int); int _tmain(int argc, _TCHAR* argv[]) { int ergebnis, zahl[1000], zuUntersuchendeZahl = 3, arrayzaehler = 0; // zählt von 0 bis 999; do { ergebnis = primzahlcheck( zuUntersuchendeZahl ); if ( ergebnis == 1 ) { zahl[arrayzaehler] = zuUntersuchendeZahl; arrayzaehler++; } zuUntersuchendeZahl++; } while (arrayzaehler<=1000); return 0; } int primzahlcheck (int a) { int teiler,rest; for (teiler=2; teiler <= a/2; teiler++) { rest = a % teiler; if (rest == 0) { return 0; } } if (rest != 0) { printf ("%d\n",a); return 1; } } grüße voldemort Zitieren
flashpixx Geschrieben 7. November 2009 Geschrieben 7. November 2009 (bearbeitet) ein ähnlicher Thread http://forum.fachinformatiker.de/c-c/133109-primzahl-berechnung.html Die Meldung ist aber auch soweit korrekt, Du hast "rest" deklariert (http://de.wikipedia.org/wiki/Deklaration_%28Programmierung%29) aber nicht initialisiert. Überlege Dir welchen Wert "rest" nach int und vor for hat Bearbeitet 7. November 2009 von flashpixx Zitieren
voldemort Geschrieben 9. November 2009 Autor Geschrieben 9. November 2009 ok, hab da mal was geändert. ich habe meinen rest benannt und nun meckert der compiler über meine zahl. hab mein array schon runtergesetzt, aber de fehler lautet immer noch "Stack around the variable 'zahl' was corrupted". Hier der geänderte Code int primzahlcheck (int); int _tmain(int argc, _TCHAR* argv[]) { int ergebnis, zuUntersuchendeZahl = 2, zahl[999], arrayzaehler = 0; // zählt von 0 bis 999; do { ergebnis = primzahlcheck( zuUntersuchendeZahl ); if ( ergebnis == 1 ) { zahl[arrayzaehler] = zuUntersuchendeZahl; arrayzaehler++; } zuUntersuchendeZahl++; } while (arrayzaehler<=1000); return 0; } int primzahlcheck (int a) { int teiler, rest=3; for (teiler=2; teiler <= a/2; teiler++) { rest = a % teiler; if (rest == 0) { return 0; } } if (rest != 0) { printf ("%d\n",a); return 1; } } Zitieren
Phirxos Geschrieben 9. November 2009 Geschrieben 9. November 2009 do { ergebnis = primzahlcheck( zuUntersuchendeZahl ); if ( ergebnis == 1 ) { zahl[arrayzaehler] = zuUntersuchendeZahl; arrayzaehler++; } zuUntersuchendeZahl++; } while (arrayzaehler<=1000); Deine Schleife ruft zuletzt zahl[1000], obwohl Zahl nur bis 998 deklariert wurde. Schreibe bei den ganzen int-Deklarationen statt zahl[999] einfach zahl[1001] dann sollte es imo gehen... Zitieren
flashpixx Geschrieben 9. November 2009 Geschrieben 9. November 2009 Ohne, dass ich jetzt genau weiß, wo der Compiler (?) - also die Zeile - dies anmeckert, muss ich Phirxos (der schneller war als ich), da zustimmen, schau Dir noch mal die Arraygrenzen an. Wenn Du ein Array deklariert int blub[1000], dann hat es 1000 Elemente, aber die beginnen bei 0 und laufen bis 999, also Dein Zählindex [0,999]. Zitieren
voldemort Geschrieben 9. November 2009 Autor Geschrieben 9. November 2009 ach ja. das war ein ganz dummer fehler von mir. ich vergaß zu beachten das er die speicher von 0-999 zählt. so weit so gut. der compiler meckert nun nicht mehr und das programm läuft. jedoch ist meine erste ausgegebene zahl 5297. d.h. irgendwo habe ich nun noch einen fehler. kann es sein das es mit der if-abfrage in der funktion zu tun hat? sobald ich diese ausklammer zeigt er mir die richgen zahlen an, oder ist das nun ein dummer zufall? Zitieren
Phirxos Geschrieben 9. November 2009 Geschrieben 9. November 2009 Eher ein dummer Zufall - das Programm rechnet alles korrekt, aber die Konsole kann nur eine begrenzte Anzahl von Zeilen anzeigen, d. h. die oberen Zeilen werden praktisch sofort von den unteren verdrängt. Ersetze in printf ("%d\n",a); das \n durch ein paar Leerzeichen, dann sollte es funktionieren... Zitieren
voldemort Geschrieben 11. November 2009 Autor Geschrieben 11. November 2009 ok, gesagt getan. das programm läuft, aber spuckt nach den 1000 zahlen noch mal 1000 zahlen aus. irgendwie kann es aber auch nicht das wahre sein das durch den zeilenumbruch so ein derber fehler auftreten kann. da muss es doch ne logische erklärung für geben, oder? bei näherem betrachten des programmes bin ich nun doch durch das array verwirrt. ich hatte ja zahl[1000] deklariert sprich zeihen zahl 0 -999. das sind doch 1000 zeichenpro speicher. wieso musste ich denn nun das array zahl[1001] benennen? grüße voldemort Zitieren
Phirxos Geschrieben 11. November 2009 Geschrieben 11. November 2009 du musst es zahl[1001] nennen, weil du arrayzaehler von 0 bis 1000 verwendest - das sind 1001, nicht 1000 Zahlen... Logische Erklärung für die Legastenie der Batch fällt mir auf Anhieb keine ein... Zitieren
voldemort Geschrieben 12. November 2009 Autor Geschrieben 12. November 2009 ich hab die lösung für das \n problem. man muss einfach nur den zeilenpuffer erhöhen und schon schreibt das programm auch die zahlen von anfang an. das muss man erstmal wissen mal ne frage am rande. kann man arrayzeichen mit hilfe einer schleife zählen? ich wüsste grad nicht wie Zitieren
Klotzkopp Geschrieben 13. November 2009 Geschrieben 13. November 2009 man muss einfach nur den zeilenpuffer erhöhen und schon schreibt das programm auch die zahlen von anfang an. das muss man erstmal wissen Dein Programm schreibt immer alle Zahlen. Die Eingabeaufforderung, die dein Programm ausführt, merkt sich aber in der Voreinstellung nicht so viele Zeilen, das ist alles. mal ne frage am rande. kann man arrayzeichen mit hilfe einer schleife zählen? ich wüsste grad nicht wieWas meinst du mit "arrayzeichen"? Was genau willst du zählen? Zitieren
voldemort Geschrieben 13. November 2009 Autor Geschrieben 13. November 2009 also ein array = ein zeichen. zB Buchstaben. sagen wir mal wir schreiben einen text mit array und möchten dann zählen wie viele zeichen bzw felder ich benutzt habe. Zitieren
Klotzkopp Geschrieben 13. November 2009 Geschrieben 13. November 2009 also ein array = ein zeichen.Ich verstehe dich nicht. Wenn ein Array ein Zeichen ist, ist dann ein Arrayzeichen ein Zeichenzeichen? Ein Array ist per Definition nicht ein Ding, sondern mehrere hintereinander. sagen wir mal wir schreiben einen text mit array und möchten dann zählen wie viele zeichen bzw felder ich benutzt habe.Du drückst dich wirklich sehr unklar aus. Was meinst du mit "text mit array"? Was meinst du mit "benutzt"? Suchst du vielleicht die Funktion strlen? Zitieren
voldemort Geschrieben 14. November 2009 Autor Geschrieben 14. November 2009 zur verständnis: char zeile[1000] gets (zeile) wir geben einen text über tastatur ein der an das array übergeben wird. nun such ich eine möglichkeit die mir ermöglicht das das programm mir ausgibt wie viele buchstaben inkl leerzeichen eingegeben wurden sind. ich hoffe das war verständlicher. ich könnte auch einen neuen thread erstellen wenn das wünschenswert ist, da es ja mit dem eigentllichen thema nichts mehr zu tun hat. voldemort Zitieren
Klotzkopp Geschrieben 14. November 2009 Geschrieben 14. November 2009 Meine Vermutung war richtig, du suchst strlen. Zitieren
voldemort Geschrieben 15. November 2009 Autor Geschrieben 15. November 2009 ja,danke. das wäre die einfache variante. ich hab es nun mit einer while-schleife gelöst. jetzt muss ich nur noch das \0 mit einer if abfrage "sichtbar" machen und schon ist wieder eine aufgabe gelöst. danke für die antworten Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.